{
    "file_diffs": [
        {
            "old_file_content": "unreleased\n==========\n\n- A complete overhaul of the ``alchemy`` scaffold as well as the\n  Wiki2 SQLAlchemy + URLDispatch tutorial to introduce more modern features\n  into the usage of SQLAlchemy with Pyramid and provide a better starting\n  point for new projects.\n  See https://github.com/Pylons/pyramid/pull/2024\n\n- Dropped Python 3.2 support.\n  See https://github.com/Pylons/pyramid/pull/2256\n\n- Fix ``pserve --browser`` to use the ``--server-name`` instead of the\n  app name when selecting a section to use. This was only working for people\n  who had server and app sections with the same name, for example\n  ``[app:main]`` and ``[server:main]``.\n  See https://github.com/Pylons/pyramid/pull/2292\n\n- Allow a leading ``=`` on the key of the request param predicate.\n  For example, '=abc=1' is equivalent down to\n  ``request.params['=abc'] == '1'``.\n  See https://github.com/Pylons/pyramid/pull/1370\n\n- A new ``request.invoke_exception_view(...)`` method which can be used to\n  invoke an exception view and get back a response. This is useful for\n  rendering an exception view outside of the context of the excview tween\n  where you may need more control over the request.\n  See https://github.com/Pylons/pyramid/pull/2393\n\n1.6 (2015-04-14)\n================\n\nBackward Incompatibilities\n--------------------------\n\n- IPython and BPython support have been removed from pshell in the core.\n  To continue using them on Pyramid 1.6+ you must install the binding\n  packages explicitly::\n\n    $ pip install pyramid_ipython\n\n    or\n\n    $ pip install pyramid_bpython\n\nFeatures\n--------\n\n- pcreate will now ask for confirmation if invoked with\n  an argument for a project name that already exists or\n  is importable in the current environment.\n  See https://github.com/Pylons/pyramid/issues/1357 and\n  https://github.com/Pylons/pyramid/pull/1837\n\n- Make it possible to subclass ``pyramid.request.Request`` and also use\n  ``pyramid.request.Request.add_request.method``.  See\n  https://github.com/Pylons/pyramid/issues/1529\n\n- The ``pyramid.config.Configurator`` has grown the ability to allow\n  actions to call other actions during a commit-cycle. This enables much more\n  logic to be placed into actions, such as the ability to invoke other actions\n  or group them for improved conflict detection. We have also exposed and\n  documented the config phases that Pyramid uses in order to further assist\n  in building conforming addons.\n  See https://github.com/Pylons/pyramid/pull/1513\n\n- Add ``pyramid.request.apply_request_extensions`` function which can be\n  used in testing to apply any request extensions configured via\n  ``config.add_request_method``. Previously it was only possible to test\n  the extensions by going through Pyramid's router.\n  See https://github.com/Pylons/pyramid/pull/1581\n\n- pcreate when run without a scaffold argument will now print information on\n  the missing flag, as well as a list of available scaffolds.\n  See https://github.com/Pylons/pyramid/pull/1566 and\n  https://github.com/Pylons/pyramid/issues/1297\n\n- Added support / testing for 'pypy3' under Tox and Travis.\n  See https://github.com/Pylons/pyramid/pull/1469\n\n- Automate code coverage metrics across py2 and py3 instead of just py2.\n  See https://github.com/Pylons/pyramid/pull/1471\n\n- Cache busting for static resources has been added and is available via a new\n  ``pyramid.config.Configurator.add_cache_buster`` API. Core APIs are shipped\n  for both cache busting via query strings and via asset manifests for\n  integrating into custom asset pipelines.\n  See https://github.com/Pylons/pyramid/pull/1380 and\n  https://github.com/Pylons/pyramid/pull/1583 and\n  https://github.com/Pylons/pyramid/pull/2171\n\n- Add ``pyramid.config.Configurator.root_package`` attribute and init\n  parameter to assist with includeable packages that wish to resolve\n  resources relative to the package in which the ``Configurator`` was created.\n  This is especially useful for addons that need to load asset specs from\n  settings, in which case it is may be natural for a developer to define\n  imports or assets relative to the top-level package.\n  See https://github.com/Pylons/pyramid/pull/1337\n\n- Added line numbers to the log formatters in the scaffolds to assist with\n  debugging. See https://github.com/Pylons/pyramid/pull/1326\n\n- Add new HTTP exception objects for status codes\n  ``428 Precondition Required``, ``429 Too Many Requests`` and\n  ``431 Request Header Fields Too Large`` in ``pyramid.httpexceptions``.\n  See https://github.com/Pylons/pyramid/pull/1372/files\n\n- The ``pshell`` script will now load a ``PYTHONSTARTUP`` file if one is\n  defined in the environment prior to launching the interpreter.\n  See https://github.com/Pylons/pyramid/pull/1448\n\n- Make it simple to define notfound and forbidden views that wish to use\n  the default exception-response view but with altered predicates and other\n  configuration options. The ``view`` argument is now optional in\n  ``config.add_notfound_view`` and ``config.add_forbidden_view``..\n  See https://github.com/Pylons/pyramid/issues/494\n\n- Greatly improve the readability of the ``pcreate`` shell script output.\n  See https://github.com/Pylons/pyramid/pull/1453\n\n- Improve robustness to timing attacks in the ``AuthTktCookieHelper`` and\n  the ``SignedCookieSessionFactory`` classes by using the stdlib's\n  ``hmac.compare_digest`` if it is available (such as Python 2.7.7+ and 3.3+).\n  See https://github.com/Pylons/pyramid/pull/1457\n\n- Assets can now be overidden by an absolute path on the filesystem when using\n  the ``config.override_asset`` API. This makes it possible to fully support\n  serving up static content from a mutable directory while still being able\n  to use the ``request.static_url`` API and ``config.add_static_view``.\n  Previously it was not possible to use ``config.add_static_view`` with an\n  absolute path **and** generate urls to the content. This change replaces\n  the call, ``config.add_static_view('/abs/path', 'static')``, with\n  ``config.add_static_view('myapp:static', 'static')`` and\n  ``config.override_asset(to_override='myapp:static/',\n  override_with='/abs/path/')``. The ``myapp:static`` asset spec is completely\n  made up and does not need to exist - it is used for generating urls\n  via ``request.static_url('myapp:static/foo.png')``.\n  See https://github.com/Pylons/pyramid/issues/1252\n\n- Added ``pyramid.config.Configurator.set_response_factory`` and the\n  ``response_factory`` keyword argument to the ``Configurator`` for defining\n  a factory that will return a custom ``Response`` class.\n  See https://github.com/Pylons/pyramid/pull/1499\n\n- Allow an iterator to be returned from a renderer. Previously it was only\n  possible to return bytes or unicode.\n  See https://github.com/Pylons/pyramid/pull/1417\n\n- ``pserve`` can now take a ``-b`` or ``--browser`` option to open the server\n  URL in a web browser. See https://github.com/Pylons/pyramid/pull/1533\n\n- Overall improvments for the ``proutes`` command. Added ``--format`` and\n  ``--glob`` arguments to the command, introduced the ``method``\n  column for displaying available request methods, and improved the ``view``\n  output by showing the module instead of just ``__repr__``.\n  See https://github.com/Pylons/pyramid/pull/1488\n\n- Support keyword-only arguments and function annotations in views in\n  Python 3. See https://github.com/Pylons/pyramid/pull/1556\n\n- ``request.response`` will no longer be mutated when using the\n  ``pyramid.renderers.render_to_response()`` API.  It is now necessary to\n  pass in a ``response=`` argument to ``render_to_response`` if you wish to\n  supply the renderer with a custom response object for it to use. If you\n  do not pass one then a response object will be created using the\n  application's ``IResponseFactory``. Almost all renderers\n  mutate the ``request.response`` response object (for example, the JSON\n  renderer sets ``request.response.content_type`` to ``application/json``).\n  However, when invoking ``render_to_response`` it is not expected that the\n  response object being returned would be the same one used later in the\n  request. The response object returned from ``render_to_response`` is now\n  explicitly different from ``request.response``. This does not change the\n  API of a renderer. See https://github.com/Pylons/pyramid/pull/1563\n\n- The ``append_slash`` argument of ```Configurator().add_notfound_view()`` will\n  now accept anything that implements the ``IResponse`` interface and will use\n  that as the response class instead of the default ``HTTPFound``.  See\n  https://github.com/Pylons/pyramid/pull/1610\n\n- Additional shells for ``pshell`` can now be registered as entrypoints. See\n  https://github.com/Pylons/pyramid/pull/1891 and\n  https://github.com/Pylons/pyramid/pull/2012\n\n- The variables injected into ``pshell`` are now displayed with their\n  docstrings instead of the default ``str(obj)`` when possible.\n  See https://github.com/Pylons/pyramid/pull/1929\n\n- ``pserve --reload`` will no longer crash on syntax errors!!!\n  See https://github.com/Pylons/pyramid/pull/2044\n\nBug Fixes\n---------\n\n- Work around an issue where ``pserve --reload`` would leave terminal echo\n  disabled if it reloaded during a pdb session.\n  See https://github.com/Pylons/pyramid/pull/1577,\n  https://github.com/Pylons/pyramid/pull/1592\n\n- ``pyramid.wsgi.wsgiapp`` and ``pyramid.wsgi.wsgiapp2`` now raise\n  ``ValueError`` when accidentally passed ``None``.\n  See https://github.com/Pylons/pyramid/pull/1320\n\n- Fix an issue whereby predicates would be resolved as maybe_dotted in the\n  introspectable but not when passed for registration. This would mean that\n  ``add_route_predicate`` for example can not take a string and turn it into\n  the actual callable function.\n  See https://github.com/Pylons/pyramid/pull/1306\n\n- Fix ``pyramid.testing.setUp`` to return a ``Configurator`` with a proper\n  package. Previously it was not possible to do package-relative includes\n  using the returned ``Configurator`` during testing. There is now a\n  ``package`` argument that can override this behavior as well.\n  See https://github.com/Pylons/pyramid/pull/1322\n\n- Fix an issue where a ``pyramid.response.FileResponse`` may apply a charset\n  where it does not belong. See https://github.com/Pylons/pyramid/pull/1251\n\n- Work around a bug introduced in Python 2.7.7 on Windows where\n  ``mimetypes.guess_type`` returns Unicode rather than str for the content\n  type, unlike any previous version of Python.  See\n  https://github.com/Pylons/pyramid/issues/1360 for more information.\n\n- ``pcreate`` now normalizes the package name by converting hyphens to\n  underscores. See https://github.com/Pylons/pyramid/pull/1376\n\n- Fix an issue with the final response/finished callback being unable to\n  add another callback to the list. See\n  https://github.com/Pylons/pyramid/pull/1373\n\n- Fix a failing unittest caused by differing mimetypes across various OSs.\n  See https://github.com/Pylons/pyramid/issues/1405\n\n- Fix route generation for static view asset specifications having no path.\n  See https://github.com/Pylons/pyramid/pull/1377\n\n- Allow the ``pyramid.renderers.JSONP`` renderer to work even if there is no\n  valid request object. In this case it will not wrap the object in a\n  callback and thus behave just like the ``pyramid.renderers.JSON`` renderer.\n  See https://github.com/Pylons/pyramid/pull/1561\n\n- Prevent \"parameters to load are deprecated\" ``DeprecationWarning``\n  from setuptools>=11.3. See https://github.com/Pylons/pyramid/pull/1541\n\n- Avoiding sharing the ``IRenderer`` objects across threads when attached to\n  a view using the `renderer=` argument. These renderers were instantiated\n  at time of first render and shared between requests, causing potentially\n  subtle effects like `pyramid.reload_templates = true` failing to work\n  in `pyramid_mako`. See https://github.com/Pylons/pyramid/pull/1575\n  and https://github.com/Pylons/pyramid/issues/1268\n\n- Avoiding timing attacks against CSRF tokens.\n  See https://github.com/Pylons/pyramid/pull/1574\n\n- ``request.finished_callbacks`` and ``request.response_callbacks`` now\n  default to an iterable instead of ``None``. It may be checked for a length\n  of 0. This was the behavior in 1.5.\n\n- ``pyramid.httpexceptions.HTTPException`` now defaults to\n  ``520 Unknown Error`` instead of ``None None`` to conform with changes in\n  WebOb 1.5.\n  See https://github.com/Pylons/pyramid/pull/1865\n\n- ``pshell`` will now preserve the capitalization of variables in the\n  ``[pshell]`` section of the INI file. This makes exposing classes to the\n  shell a little more straightfoward.\n  See https://github.com/Pylons/pyramid/pull/1883\n\n- Fix an issue when user passes unparsed strings to ``pyramid.session.CookieSession``\n  and ``pyramid.authentication.AuthTktCookieHelper`` for time related parameters\n  ``timeout``, ``reissue_time``, ``max_age`` that expect an integer value.\n  See https://github.com/Pylons/pyramid/pull/2050\n\n- Fixed usage of ``pserve --monitor-restart --daemon`` which would fail in\n  horrible ways. See https://github.com/Pylons/pyramid/pull/2118\n\n- Explicitly prevent ``pserve --reload --daemon`` from being used. It's never\n  been supported but would work and fail in weird ways.\n  See https://github.com/Pylons/pyramid/pull/2119\n\n- Fix an issue on Windows when running ``pserve --reload`` in which the\n  process failed to fork because it could not find the pserve script to\n  run. See https://github.com/Pylons/pyramid/pull/2137\n\n- Ensure that ``IAssetDescriptor.abspath`` always returns an absolute path.\n  There were cases depending on the process CWD that a relative path would\n  be returned. See https://github.com/Pylons/pyramid/issues/2187\n\n\nDeprecations\n------------\n\n- The ``pserve`` command's daemonization features have been deprecated as well\n  as ``--monitor-restart``. This includes the ``[start,stop,restart,status]``\n  subcommands as well as the ``--daemon``, ``--stop-daemon``, ``--pid-file``,\n  ``--status``, ``--user`` and ``--group`` flags.\n  See https://github.com/Pylons/pyramid/pull/2120\n  and https://github.com/Pylons/pyramid/pull/2189\n  and https://github.com/Pylons/pyramid/pull/1641\n\n  Please use a real process manager in the future instead of relying on the\n  ``pserve`` to daemonize itself. Many options exist including your Operating\n  System's services such as Systemd or Upstart, as well as Python-based\n  solutions like Circus and Supervisor.\n\n  See https://github.com/Pylons/pyramid/pull/1641\n  and https://github.com/Pylons/pyramid/pull/2120\n\n- Renamed the ``principal`` argument to ``pyramid.security.remember()`` to\n  ``userid`` in order to clarify its intended purpose.\n  See https://github.com/Pylons/pyramid/pull/1399\n\nDocs\n----\n\n- Moved the documentation for ``accept`` on ``Configurator.add_view`` to no\n  longer be part of the predicate list. See\n  https://github.com/Pylons/pyramid/issues/1391 for a bug report stating\n  ``not_`` was failing on ``accept``. Discussion with @mcdonc led to the\n  conclusion that it should not be documented as a predicate.\n  See https://github.com/Pylons/pyramid/pull/1487 for this PR\n\n- Removed logging configuration from Quick Tutorial ini files except for\n  scaffolding- and logging-related chapters to avoid needing to explain it too\n  early.\n\n- Clarify a previously-implied detail of the ``ISession.invalidate`` API\n  documentation.\n\n- Improve and clarify the documentation on what Pyramid defines as a\n  ``principal`` and a ``userid`` in its security APIs.\n  See https://github.com/Pylons/pyramid/pull/1399\n\n- Add documentation of command line programs (``p*`` scripts). See\n  https://github.com/Pylons/pyramid/pull/2191\n\nScaffolds\n---------\n\n- Update scaffold generating machinery to return the version of pyramid and\n  pyramid docs for use in scaffolds. Updated starter, alchemy and zodb\n  templates to have links to correctly versioned documentation and reflect\n  which pyramid was used to generate the scaffold.\n\n- Removed non-ascii copyright symbol from templates, as this was\n  causing the scaffolds to fail for project generation.\n\n- You can now run the scaffolding func tests via ``tox py2-scaffolds`` and\n  ``tox py3-scaffolds``.\n\n",
            "new_file_content": "unreleased\n==========\n\n- A complete overhaul of the ``alchemy`` scaffold as well as the\n  Wiki2 SQLAlchemy + URLDispatch tutorial to introduce more modern features\n  into the usage of SQLAlchemy with Pyramid and provide a better starting\n  point for new projects.\n  See https://github.com/Pylons/pyramid/pull/2024\n\n- Dropped Python 3.2 support.\n  See https://github.com/Pylons/pyramid/pull/2256\n\n- Fix ``pserve --browser`` to use the ``--server-name`` instead of the\n  app name when selecting a section to use. This was only working for people\n  who had server and app sections with the same name, for example\n  ``[app:main]`` and ``[server:main]``.\n  See https://github.com/Pylons/pyramid/pull/2292\n\n- Allow a leading ``=`` on the key of the request param predicate.\n  For example, '=abc=1' is equivalent down to\n  ``request.params['=abc'] == '1'``.\n  See https://github.com/Pylons/pyramid/pull/1370\n\n- A new ``request.invoke_exception_view(...)`` method which can be used to\n  invoke an exception view and get back a response. This is useful for\n  rendering an exception view outside of the context of the excview tween\n  where you may need more control over the request.\n  See https://github.com/Pylons/pyramid/pull/2393\n\n- Allow using variable substitutions like ``%(LOGGING_LOGGER_ROOT_LEVEL)s``\n  for logging sections of the .ini file and populate these variables from\n  the ``pserve`` command line -- e.g.:\n  ``pserve development.ini LOGGING_LOGGER_ROOT_LEVEL=DEBUG``\n  See https://github.com/Pylons/pyramid/pull/2399\n\n1.6 (2015-04-14)\n================\n\nBackward Incompatibilities\n--------------------------\n\n- IPython and BPython support have been removed from pshell in the core.\n  To continue using them on Pyramid 1.6+ you must install the binding\n  packages explicitly::\n\n    $ pip install pyramid_ipython\n\n    or\n\n    $ pip install pyramid_bpython\n\nFeatures\n--------\n\n- pcreate will now ask for confirmation if invoked with\n  an argument for a project name that already exists or\n  is importable in the current environment.\n  See https://github.com/Pylons/pyramid/issues/1357 and\n  https://github.com/Pylons/pyramid/pull/1837\n\n- Make it possible to subclass ``pyramid.request.Request`` and also use\n  ``pyramid.request.Request.add_request.method``.  See\n  https://github.com/Pylons/pyramid/issues/1529\n\n- The ``pyramid.config.Configurator`` has grown the ability to allow\n  actions to call other actions during a commit-cycle. This enables much more\n  logic to be placed into actions, such as the ability to invoke other actions\n  or group them for improved conflict detection. We have also exposed and\n  documented the config phases that Pyramid uses in order to further assist\n  in building conforming addons.\n  See https://github.com/Pylons/pyramid/pull/1513\n\n- Add ``pyramid.request.apply_request_extensions`` function which can be\n  used in testing to apply any request extensions configured via\n  ``config.add_request_method``. Previously it was only possible to test\n  the extensions by going through Pyramid's router.\n  See https://github.com/Pylons/pyramid/pull/1581\n\n- pcreate when run without a scaffold argument will now print information on\n  the missing flag, as well as a list of available scaffolds.\n  See https://github.com/Pylons/pyramid/pull/1566 and\n  https://github.com/Pylons/pyramid/issues/1297\n\n- Added support / testing for 'pypy3' under Tox and Travis.\n  See https://github.com/Pylons/pyramid/pull/1469\n\n- Automate code coverage metrics across py2 and py3 instead of just py2.\n  See https://github.com/Pylons/pyramid/pull/1471\n\n- Cache busting for static resources has been added and is available via a new\n  ``pyramid.config.Configurator.add_cache_buster`` API. Core APIs are shipped\n  for both cache busting via query strings and via asset manifests for\n  integrating into custom asset pipelines.\n  See https://github.com/Pylons/pyramid/pull/1380 and\n  https://github.com/Pylons/pyramid/pull/1583 and\n  https://github.com/Pylons/pyramid/pull/2171\n\n- Add ``pyramid.config.Configurator.root_package`` attribute and init\n  parameter to assist with includeable packages that wish to resolve\n  resources relative to the package in which the ``Configurator`` was created.\n  This is especially useful for addons that need to load asset specs from\n  settings, in which case it is may be natural for a developer to define\n  imports or assets relative to the top-level package.\n  See https://github.com/Pylons/pyramid/pull/1337\n\n- Added line numbers to the log formatters in the scaffolds to assist with\n  debugging. See https://github.com/Pylons/pyramid/pull/1326\n\n- Add new HTTP exception objects for status codes\n  ``428 Precondition Required``, ``429 Too Many Requests`` and\n  ``431 Request Header Fields Too Large`` in ``pyramid.httpexceptions``.\n  See https://github.com/Pylons/pyramid/pull/1372/files\n\n- The ``pshell`` script will now load a ``PYTHONSTARTUP`` file if one is\n  defined in the environment prior to launching the interpreter.\n  See https://github.com/Pylons/pyramid/pull/1448\n\n- Make it simple to define notfound and forbidden views that wish to use\n  the default exception-response view but with altered predicates and other\n  configuration options. The ``view`` argument is now optional in\n  ``config.add_notfound_view`` and ``config.add_forbidden_view``..\n  See https://github.com/Pylons/pyramid/issues/494\n\n- Greatly improve the readability of the ``pcreate`` shell script output.\n  See https://github.com/Pylons/pyramid/pull/1453\n\n- Improve robustness to timing attacks in the ``AuthTktCookieHelper`` and\n  the ``SignedCookieSessionFactory`` classes by using the stdlib's\n  ``hmac.compare_digest`` if it is available (such as Python 2.7.7+ and 3.3+).\n  See https://github.com/Pylons/pyramid/pull/1457\n\n- Assets can now be overidden by an absolute path on the filesystem when using\n  the ``config.override_asset`` API. This makes it possible to fully support\n  serving up static content from a mutable directory while still being able\n  to use the ``request.static_url`` API and ``config.add_static_view``.\n  Previously it was not possible to use ``config.add_static_view`` with an\n  absolute path **and** generate urls to the content. This change replaces\n  the call, ``config.add_static_view('/abs/path', 'static')``, with\n  ``config.add_static_view('myapp:static', 'static')`` and\n  ``config.override_asset(to_override='myapp:static/',\n  override_with='/abs/path/')``. The ``myapp:static`` asset spec is completely\n  made up and does not need to exist - it is used for generating urls\n  via ``request.static_url('myapp:static/foo.png')``.\n  See https://github.com/Pylons/pyramid/issues/1252\n\n- Added ``pyramid.config.Configurator.set_response_factory`` and the\n  ``response_factory`` keyword argument to the ``Configurator`` for defining\n  a factory that will return a custom ``Response`` class.\n  See https://github.com/Pylons/pyramid/pull/1499\n\n- Allow an iterator to be returned from a renderer. Previously it was only\n  possible to return bytes or unicode.\n  See https://github.com/Pylons/pyramid/pull/1417\n\n- ``pserve`` can now take a ``-b`` or ``--browser`` option to open the server\n  URL in a web browser. See https://github.com/Pylons/pyramid/pull/1533\n\n- Overall improvments for the ``proutes`` command. Added ``--format`` and\n  ``--glob`` arguments to the command, introduced the ``method``\n  column for displaying available request methods, and improved the ``view``\n  output by showing the module instead of just ``__repr__``.\n  See https://github.com/Pylons/pyramid/pull/1488\n\n- Support keyword-only arguments and function annotations in views in\n  Python 3. See https://github.com/Pylons/pyramid/pull/1556\n\n- ``request.response`` will no longer be mutated when using the\n  ``pyramid.renderers.render_to_response()`` API.  It is now necessary to\n  pass in a ``response=`` argument to ``render_to_response`` if you wish to\n  supply the renderer with a custom response object for it to use. If you\n  do not pass one then a response object will be created using the\n  application's ``IResponseFactory``. Almost all renderers\n  mutate the ``request.response`` response object (for example, the JSON\n  renderer sets ``request.response.content_type`` to ``application/json``).\n  However, when invoking ``render_to_response`` it is not expected that the\n  response object being returned would be the same one used later in the\n  request. The response object returned from ``render_to_response`` is now\n  explicitly different from ``request.response``. This does not change the\n  API of a renderer. See https://github.com/Pylons/pyramid/pull/1563\n\n- The ``append_slash`` argument of ```Configurator().add_notfound_view()`` will\n  now accept anything that implements the ``IResponse`` interface and will use\n  that as the response class instead of the default ``HTTPFound``.  See\n  https://github.com/Pylons/pyramid/pull/1610\n\n- Additional shells for ``pshell`` can now be registered as entrypoints. See\n  https://github.com/Pylons/pyramid/pull/1891 and\n  https://github.com/Pylons/pyramid/pull/2012\n\n- The variables injected into ``pshell`` are now displayed with their\n  docstrings instead of the default ``str(obj)`` when possible.\n  See https://github.com/Pylons/pyramid/pull/1929\n\n- ``pserve --reload`` will no longer crash on syntax errors!!!\n  See https://github.com/Pylons/pyramid/pull/2044\n\nBug Fixes\n---------\n\n- Work around an issue where ``pserve --reload`` would leave terminal echo\n  disabled if it reloaded during a pdb session.\n  See https://github.com/Pylons/pyramid/pull/1577,\n  https://github.com/Pylons/pyramid/pull/1592\n\n- ``pyramid.wsgi.wsgiapp`` and ``pyramid.wsgi.wsgiapp2`` now raise\n  ``ValueError`` when accidentally passed ``None``.\n  See https://github.com/Pylons/pyramid/pull/1320\n\n- Fix an issue whereby predicates would be resolved as maybe_dotted in the\n  introspectable but not when passed for registration. This would mean that\n  ``add_route_predicate`` for example can not take a string and turn it into\n  the actual callable function.\n  See https://github.com/Pylons/pyramid/pull/1306\n\n- Fix ``pyramid.testing.setUp`` to return a ``Configurator`` with a proper\n  package. Previously it was not possible to do package-relative includes\n  using the returned ``Configurator`` during testing. There is now a\n  ``package`` argument that can override this behavior as well.\n  See https://github.com/Pylons/pyramid/pull/1322\n\n- Fix an issue where a ``pyramid.response.FileResponse`` may apply a charset\n  where it does not belong. See https://github.com/Pylons/pyramid/pull/1251\n\n- Work around a bug introduced in Python 2.7.7 on Windows where\n  ``mimetypes.guess_type`` returns Unicode rather than str for the content\n  type, unlike any previous version of Python.  See\n  https://github.com/Pylons/pyramid/issues/1360 for more information.\n\n- ``pcreate`` now normalizes the package name by converting hyphens to\n  underscores. See https://github.com/Pylons/pyramid/pull/1376\n\n- Fix an issue with the final response/finished callback being unable to\n  add another callback to the list. See\n  https://github.com/Pylons/pyramid/pull/1373\n\n- Fix a failing unittest caused by differing mimetypes across various OSs.\n  See https://github.com/Pylons/pyramid/issues/1405\n\n- Fix route generation for static view asset specifications having no path.\n  See https://github.com/Pylons/pyramid/pull/1377\n\n- Allow the ``pyramid.renderers.JSONP`` renderer to work even if there is no\n  valid request object. In this case it will not wrap the object in a\n  callback and thus behave just like the ``pyramid.renderers.JSON`` renderer.\n  See https://github.com/Pylons/pyramid/pull/1561\n\n- Prevent \"parameters to load are deprecated\" ``DeprecationWarning``\n  from setuptools>=11.3. See https://github.com/Pylons/pyramid/pull/1541\n\n- Avoiding sharing the ``IRenderer`` objects across threads when attached to\n  a view using the `renderer=` argument. These renderers were instantiated\n  at time of first render and shared between requests, causing potentially\n  subtle effects like `pyramid.reload_templates = true` failing to work\n  in `pyramid_mako`. See https://github.com/Pylons/pyramid/pull/1575\n  and https://github.com/Pylons/pyramid/issues/1268\n\n- Avoiding timing attacks against CSRF tokens.\n  See https://github.com/Pylons/pyramid/pull/1574\n\n- ``request.finished_callbacks`` and ``request.response_callbacks`` now\n  default to an iterable instead of ``None``. It may be checked for a length\n  of 0. This was the behavior in 1.5.\n\n- ``pyramid.httpexceptions.HTTPException`` now defaults to\n  ``520 Unknown Error`` instead of ``None None`` to conform with changes in\n  WebOb 1.5.\n  See https://github.com/Pylons/pyramid/pull/1865\n\n- ``pshell`` will now preserve the capitalization of variables in the\n  ``[pshell]`` section of the INI file. This makes exposing classes to the\n  shell a little more straightfoward.\n  See https://github.com/Pylons/pyramid/pull/1883\n\n- Fix an issue when user passes unparsed strings to ``pyramid.session.CookieSession``\n  and ``pyramid.authentication.AuthTktCookieHelper`` for time related parameters\n  ``timeout``, ``reissue_time``, ``max_age`` that expect an integer value.\n  See https://github.com/Pylons/pyramid/pull/2050\n\n- Fixed usage of ``pserve --monitor-restart --daemon`` which would fail in\n  horrible ways. See https://github.com/Pylons/pyramid/pull/2118\n\n- Explicitly prevent ``pserve --reload --daemon`` from being used. It's never\n  been supported but would work and fail in weird ways.\n  See https://github.com/Pylons/pyramid/pull/2119\n\n- Fix an issue on Windows when running ``pserve --reload`` in which the\n  process failed to fork because it could not find the pserve script to\n  run. See https://github.com/Pylons/pyramid/pull/2137\n\n- Ensure that ``IAssetDescriptor.abspath`` always returns an absolute path.\n  There were cases depending on the process CWD that a relative path would\n  be returned. See https://github.com/Pylons/pyramid/issues/2187\n\n\nDeprecations\n------------\n\n- The ``pserve`` command's daemonization features have been deprecated as well\n  as ``--monitor-restart``. This includes the ``[start,stop,restart,status]``\n  subcommands as well as the ``--daemon``, ``--stop-daemon``, ``--pid-file``,\n  ``--status``, ``--user`` and ``--group`` flags.\n  See https://github.com/Pylons/pyramid/pull/2120\n  and https://github.com/Pylons/pyramid/pull/2189\n  and https://github.com/Pylons/pyramid/pull/1641\n\n  Please use a real process manager in the future instead of relying on the\n  ``pserve`` to daemonize itself. Many options exist including your Operating\n  System's services such as Systemd or Upstart, as well as Python-based\n  solutions like Circus and Supervisor.\n\n  See https://github.com/Pylons/pyramid/pull/1641\n  and https://github.com/Pylons/pyramid/pull/2120\n\n- Renamed the ``principal`` argument to ``pyramid.security.remember()`` to\n  ``userid`` in order to clarify its intended purpose.\n  See https://github.com/Pylons/pyramid/pull/1399\n\nDocs\n----\n\n- Moved the documentation for ``accept`` on ``Configurator.add_view`` to no\n  longer be part of the predicate list. See\n  https://github.com/Pylons/pyramid/issues/1391 for a bug report stating\n  ``not_`` was failing on ``accept``. Discussion with @mcdonc led to the\n  conclusion that it should not be documented as a predicate.\n  See https://github.com/Pylons/pyramid/pull/1487 for this PR\n\n- Removed logging configuration from Quick Tutorial ini files except for\n  scaffolding- and logging-related chapters to avoid needing to explain it too\n  early.\n\n- Clarify a previously-implied detail of the ``ISession.invalidate`` API\n  documentation.\n\n- Improve and clarify the documentation on what Pyramid defines as a\n  ``principal`` and a ``userid`` in its security APIs.\n  See https://github.com/Pylons/pyramid/pull/1399\n\n- Add documentation of command line programs (``p*`` scripts). See\n  https://github.com/Pylons/pyramid/pull/2191\n\nScaffolds\n---------\n\n- Update scaffold generating machinery to return the version of pyramid and\n  pyramid docs for use in scaffolds. Updated starter, alchemy and zodb\n  templates to have links to correctly versioned documentation and reflect\n  which pyramid was used to generate the scaffold.\n\n- Removed non-ascii copyright symbol from templates, as this was\n  causing the scaffolds to fail for project generation.\n\n- You can now run the scaffolding func tests via ``tox py2-scaffolds`` and\n  ``tox py3-scaffolds``.\n\n",
            "header": {
                "file": {
                    "path": "CHANGES.txt"
                },
                "misc_line": null
            },
            "index_line": {
                "old_commit_hash": "a17f4aab5",
                "new_commit_hash": "4a61dbffa",
                "mode": "100644"
            },
            "is_binary_file": false,
            "binary_line": null,
            "minus_file": {
                "path": "a/CHANGES.txt"
            },
            "plus_file": {
                "path": "b/CHANGES.txt"
            },
            "hunks": [
                {
                    "descriptor": {
                        "old_range": {
                            "start": 27,
                            "length": 6
                        },
                        "new_range": {
                            "start": 27,
                            "length": 12
                        },
                        "section": "unreleased"
                    },
                    "line_group": {
                        "all_lines": [
                            {
                                "content": "  where you may need more control over the request.",
                                "type": "context"
                            },
                            {
                                "content": "  See https://github.com/Pylons/pyramid/pull/2393",
                                "type": "context"
                            },
                            {
                                "content": "",
                                "type": "context"
                            },
                            {
                                "content": "- Allow using variable substitutions like ``%(LOGGING_LOGGER_ROOT_LEVEL)s``",
                                "type": "added"
                            },
                            {
                                "content": "  for logging sections of the .ini file and populate these variables from",
                                "type": "added"
                            },
                            {
                                "content": "  the ``pserve`` command line -- e.g.:",
                                "type": "added"
                            },
                            {
                                "content": "  ``pserve development.ini LOGGING_LOGGER_ROOT_LEVEL=DEBUG``",
                                "type": "added"
                            },
                            {
                                "content": "  See https://github.com/Pylons/pyramid/pull/2399",
                                "type": "added"
                            },
                            {
                                "content": "",
                                "type": "added"
                            },
                            {
                                "content": "1.6 (2015-04-14)",
                                "type": "context"
                            },
                            {
                                "content": "================",
                                "type": "context"
                            },
                            {
                                "content": "",
                                "type": "context"
                            }
                        ]
                    },
                    "modified_entities": [],
                    "added_entities": [],
                    "deleted_entities": []
                }
            ]
        },
        {
            "old_file_content": ".. _paster_module:\n\n:mod:`pyramid.paster`\n---------------------------\n\n.. automodule:: pyramid.paster\n\n    .. autofunction:: bootstrap\n\n    .. autofunction:: get_app(config_uri, name=None, options=None)\n\n    .. autofunction:: get_appsettings(config_uri, name=None, options=None)\n\n    .. autofunction:: setup_logging(config_uri)\n",
            "new_file_content": ".. _paster_module:\n\n:mod:`pyramid.paster`\n---------------------------\n\n.. automodule:: pyramid.paster\n\n    .. autofunction:: bootstrap\n\n    .. autofunction:: get_app(config_uri, name=None, options=None)\n\n    .. autofunction:: get_appsettings(config_uri, name=None, options=None)\n\n    .. autofunction:: setup_logging(config_uri, global_conf=None)\n",
            "header": {
                "file": {
                    "path": "docs/api/paster.rst"
                },
                "misc_line": null
            },
            "index_line": {
                "old_commit_hash": "edc3738fc",
                "new_commit_hash": "27bc81a1f",
                "mode": "100644"
            },
            "is_binary_file": false,
            "binary_line": null,
            "minus_file": {
                "path": "a/docs/api/paster.rst"
            },
            "plus_file": {
                "path": "b/docs/api/paster.rst"
            },
            "hunks": [
                {
                    "descriptor": {
                        "old_range": {
                            "start": 11,
                            "length": 4
                        },
                        "new_range": {
                            "start": 11,
                            "length": 4
                        },
                        "section": ""
                    },
                    "line_group": {
                        "all_lines": [
                            {
                                "content": "",
                                "type": "context"
                            },
                            {
                                "content": "    .. autofunction:: get_appsettings(config_uri, name=None, options=None)",
                                "type": "context"
                            },
                            {
                                "content": "",
                                "type": "context"
                            },
                            {
                                "content": "    .. autofunction:: setup_logging(config_uri)",
                                "type": "deleted"
                            },
                            {
                                "content": "    .. autofunction:: setup_logging(config_uri, global_conf=None)",
                                "type": "added"
                            }
                        ]
                    },
                    "modified_entities": [],
                    "added_entities": [],
                    "deleted_entities": []
                }
            ]
        },
        {
            "old_file_content": "import os\n\nfrom paste.deploy import (\n    loadapp,\n    appconfig,\n    )\n\nfrom pyramid.compat import configparser\nfrom logging.config import fileConfig\nfrom pyramid.scripting import prepare\n\ndef get_app(config_uri, name=None, options=None, loadapp=loadapp):\n    \"\"\" Return the WSGI application named ``name`` in the PasteDeploy\n    config file specified by ``config_uri``.\n\n    ``options``, if passed, should be a dictionary used as variable assignments\n    like ``{'http_port': 8080}``.  This is useful if e.g. ``%(http_port)s`` is\n    used in the config file.\n\n    If the ``name`` is None, this will attempt to parse the name from\n    the ``config_uri`` string expecting the format ``inifile#name``.\n    If no name is found, the name will default to \"main\".\"\"\"\n    path, section = _getpathsec(config_uri, name)\n    config_name = 'config:%s' % path\n    here_dir = os.getcwd()\n\n    app = loadapp(\n        config_name,\n        name=section,\n        relative_to=here_dir,\n        global_conf=options)\n\n    return app\n\ndef get_appsettings(config_uri, name=None, options=None, appconfig=appconfig):\n    \"\"\" Return a dictionary representing the key/value pairs in an ``app``\n    section within the file represented by ``config_uri``.\n\n    ``options``, if passed, should be a dictionary used as variable assignments\n    like ``{'http_port': 8080}``.  This is useful if e.g. ``%(http_port)s`` is\n    used in the config file.\n\n    If the ``name`` is None, this will attempt to parse the name from\n    the ``config_uri`` string expecting the format ``inifile#name``.\n    If no name is found, the name will default to \"main\".\"\"\"\n    path, section = _getpathsec(config_uri, name)\n    config_name = 'config:%s' % path\n    here_dir = os.getcwd()\n    return appconfig(\n        config_name,\n        name=section,\n        relative_to=here_dir,\n        global_conf=options)\n\ndef setup_logging(config_uri, fileConfig=fileConfig,\n                  configparser=configparser):\n    \"\"\"\n    Set up logging via the logging module's fileConfig function with the\n    filename specified via ``config_uri`` (a string in the form\n    ``filename#sectionname``).\n\n    ConfigParser defaults are specified for the special ``__file__``\n    and ``here`` variables, similar to PasteDeploy config loading.\n    \"\"\"\n    path, _ = _getpathsec(config_uri, None)\n    parser = configparser.ConfigParser()\n    parser.read([path])\n    if parser.has_section('loggers'):\n        config_file = os.path.abspath(path)\n        return fileConfig(\n            config_file,\n            dict(__file__=config_file, here=os.path.dirname(config_file))\n            )\n\ndef _getpathsec(config_uri, name):\n    if '#' in config_uri:\n        path, section = config_uri.split('#', 1)\n    else:\n        path, section = config_uri, 'main'\n    if name:\n        section = name\n    return path, section\n\ndef bootstrap(config_uri, request=None, options=None):\n    \"\"\" Load a WSGI application from the PasteDeploy config file specified\n    by ``config_uri``. The environment will be configured as if it is\n    currently serving ``request``, leaving a natural environment in place\n    to write scripts that can generate URLs and utilize renderers.\n\n    This function returns a dictionary with ``app``, ``root``, ``closer``,\n    ``request``, and ``registry`` keys.  ``app`` is the WSGI app loaded\n    (based on the ``config_uri``), ``root`` is the traversal root resource\n    of the Pyramid application, and ``closer`` is a parameterless callback\n    that may be called when your script is complete (it pops a threadlocal\n    stack).\n\n    .. note::\n\n       Most operations within :app:`Pyramid` expect to be invoked within the\n       context of a WSGI request, thus it's important when loading your\n       application to anchor it when executing scripts and other code that is\n       not normally invoked during active WSGI requests.\n\n    .. note::\n\n       For a complex config file containing multiple :app:`Pyramid`\n       applications, this function will setup the environment under the context\n       of the last-loaded :app:`Pyramid` application. You may load a specific\n       application yourself by using the lower-level functions\n       :meth:`pyramid.paster.get_app` and :meth:`pyramid.scripting.prepare` in\n       conjunction with :attr:`pyramid.config.global_registries`.\n\n    ``config_uri`` -- specifies the PasteDeploy config file to use for the\n    interactive shell. The format is ``inifile#name``. If the name is left\n    off, ``main`` will be assumed.\n\n    ``request`` -- specified to anchor the script to a given set of WSGI\n    parameters. For example, most people would want to specify the host,\n    scheme and port such that their script will generate URLs in relation\n    to those parameters. A request with default parameters is constructed\n    for you if none is provided. You can mutate the request's ``environ``\n    later to setup a specific host/port/scheme/etc.\n\n    ``options`` Is passed to get_app for use as variable assignments like \n    {'http_port': 8080} and then use %(http_port)s in the\n    config file.\n\n    See :ref:`writing_a_script` for more information about how to use this\n    function.\n    \"\"\"\n    app = get_app(config_uri, options=options)\n    env = prepare(request)\n    env['app'] = app\n    return env\n\n",
            "new_file_content": "import os\n\nfrom paste.deploy import (\n    loadapp,\n    appconfig,\n    )\n\nfrom pyramid.compat import configparser\nfrom logging.config import fileConfig\nfrom pyramid.scripting import prepare\n\ndef get_app(config_uri, name=None, options=None, loadapp=loadapp):\n    \"\"\" Return the WSGI application named ``name`` in the PasteDeploy\n    config file specified by ``config_uri``.\n\n    ``options``, if passed, should be a dictionary used as variable assignments\n    like ``{'http_port': 8080}``.  This is useful if e.g. ``%(http_port)s`` is\n    used in the config file.\n\n    If the ``name`` is None, this will attempt to parse the name from\n    the ``config_uri`` string expecting the format ``inifile#name``.\n    If no name is found, the name will default to \"main\".\"\"\"\n    path, section = _getpathsec(config_uri, name)\n    config_name = 'config:%s' % path\n    here_dir = os.getcwd()\n\n    app = loadapp(\n        config_name,\n        name=section,\n        relative_to=here_dir,\n        global_conf=options)\n\n    return app\n\ndef get_appsettings(config_uri, name=None, options=None, appconfig=appconfig):\n    \"\"\" Return a dictionary representing the key/value pairs in an ``app``\n    section within the file represented by ``config_uri``.\n\n    ``options``, if passed, should be a dictionary used as variable assignments\n    like ``{'http_port': 8080}``.  This is useful if e.g. ``%(http_port)s`` is\n    used in the config file.\n\n    If the ``name`` is None, this will attempt to parse the name from\n    the ``config_uri`` string expecting the format ``inifile#name``.\n    If no name is found, the name will default to \"main\".\"\"\"\n    path, section = _getpathsec(config_uri, name)\n    config_name = 'config:%s' % path\n    here_dir = os.getcwd()\n    return appconfig(\n        config_name,\n        name=section,\n        relative_to=here_dir,\n        global_conf=options)\n\ndef setup_logging(config_uri, global_conf=None,\n                  fileConfig=fileConfig,\n                  configparser=configparser):\n    \"\"\"\n    Set up logging via the logging module's fileConfig function with the\n    filename specified via ``config_uri`` (a string in the form\n    ``filename#sectionname``).\n\n    ConfigParser defaults are specified for the special ``__file__``\n    and ``here`` variables, similar to PasteDeploy config loading.\n    Extra defaults can optionally be specified as a dict in ``global_conf``.\n    \"\"\"\n    path, _ = _getpathsec(config_uri, None)\n    parser = configparser.ConfigParser()\n    parser.read([path])\n    if parser.has_section('loggers'):\n        config_file = os.path.abspath(path)\n        if global_conf:\n            # Copy to avoid side effects\n            global_conf = dict(global_conf)\n        else:\n            global_conf = {}\n        global_conf.update(\n            __file__=config_file,\n            here=os.path.dirname(config_file))\n        return fileConfig(config_file, global_conf)\n\ndef _getpathsec(config_uri, name):\n    if '#' in config_uri:\n        path, section = config_uri.split('#', 1)\n    else:\n        path, section = config_uri, 'main'\n    if name:\n        section = name\n    return path, section\n\ndef bootstrap(config_uri, request=None, options=None):\n    \"\"\" Load a WSGI application from the PasteDeploy config file specified\n    by ``config_uri``. The environment will be configured as if it is\n    currently serving ``request``, leaving a natural environment in place\n    to write scripts that can generate URLs and utilize renderers.\n\n    This function returns a dictionary with ``app``, ``root``, ``closer``,\n    ``request``, and ``registry`` keys.  ``app`` is the WSGI app loaded\n    (based on the ``config_uri``), ``root`` is the traversal root resource\n    of the Pyramid application, and ``closer`` is a parameterless callback\n    that may be called when your script is complete (it pops a threadlocal\n    stack).\n\n    .. note::\n\n       Most operations within :app:`Pyramid` expect to be invoked within the\n       context of a WSGI request, thus it's important when loading your\n       application to anchor it when executing scripts and other code that is\n       not normally invoked during active WSGI requests.\n\n    .. note::\n\n       For a complex config file containing multiple :app:`Pyramid`\n       applications, this function will setup the environment under the context\n       of the last-loaded :app:`Pyramid` application. You may load a specific\n       application yourself by using the lower-level functions\n       :meth:`pyramid.paster.get_app` and :meth:`pyramid.scripting.prepare` in\n       conjunction with :attr:`pyramid.config.global_registries`.\n\n    ``config_uri`` -- specifies the PasteDeploy config file to use for the\n    interactive shell. The format is ``inifile#name``. If the name is left\n    off, ``main`` will be assumed.\n\n    ``request`` -- specified to anchor the script to a given set of WSGI\n    parameters. For example, most people would want to specify the host,\n    scheme and port such that their script will generate URLs in relation\n    to those parameters. A request with default parameters is constructed\n    for you if none is provided. You can mutate the request's ``environ``\n    later to setup a specific host/port/scheme/etc.\n\n    ``options`` Is passed to get_app for use as variable assignments like \n    {'http_port': 8080} and then use %(http_port)s in the\n    config file.\n\n    See :ref:`writing_a_script` for more information about how to use this\n    function.\n    \"\"\"\n    app = get_app(config_uri, options=options)\n    env = prepare(request)\n    env['app'] = app\n    return env\n\n",
            "header": {
                "file": {
                    "path": "pyramid/paster.py"
                },
                "misc_line": null
            },
            "index_line": {
                "old_commit_hash": "967543849",
                "new_commit_hash": "5e2200ea7",
                "mode": "100644"
            },
            "is_binary_file": false,
            "binary_line": null,
            "minus_file": {
                "path": "a/pyramid/paster.py"
            },
            "plus_file": {
                "path": "b/pyramid/paster.py"
            },
            "hunks": [
                {
                    "descriptor": {
                        "old_range": {
                            "start": 52,
                            "length": 7
                        },
                        "new_range": {
                            "start": 52,
                            "length": 8
                        },
                        "section": "def get_appsettings(config_uri, name=None, options=None, appconfig=appconfig):"
                    },
                    "line_group": {
                        "all_lines": [
                            {
                                "content": "        relative_to=here_dir,",
                                "type": "context"
                            },
                            {
                                "content": "        global_conf=options)",
                                "type": "context"
                            },
                            {
                                "content": "",
                                "type": "context"
                            },
                            {
                                "content": "def setup_logging(config_uri, fileConfig=fileConfig,",
                                "type": "deleted"
                            },
                            {
                                "content": "def setup_logging(config_uri, global_conf=None,",
                                "type": "added"
                            },
                            {
                                "content": "                  fileConfig=fileConfig,",
                                "type": "added"
                            },
                            {
                                "content": "                  configparser=configparser):",
                                "type": "context"
                            },
                            {
                                "content": "    \"\"\"",
                                "type": "context"
                            },
                            {
                                "content": "    Set up logging via the logging module's fileConfig function with the",
                                "type": "context"
                            }
                        ]
                    },
                    "modified_entities": [
                        {
                            "file_name": "pyramid/paster.py",
                            "type": "function",
                            "name": "setup_logging",
                            "content": "def setup_logging(config_uri, fileConfig=fileConfig,\n                  configparser=configparser):\n    \"\"\"\n    Set up logging via the logging module's fileConfig function with the\n    filename specified via ``config_uri`` (a string in the form\n    ``filename#sectionname``).\n\n    ConfigParser defaults are specified for the special ``__file__``\n    and ``here`` variables, similar to PasteDeploy config loading.\n    \"\"\"\n    path, _ = _getpathsec(config_uri, None)\n    parser = configparser.ConfigParser()\n    parser.read([path])\n    if parser.has_section('loggers'):\n        config_file = os.path.abspath(path)\n        return fileConfig(\n            config_file,\n            dict(__file__=config_file, here=os.path.dirname(config_file))\n            )",
                            "ast_type_str": "FunctionDef",
                            "start_lineno": 55,
                            "end_lineno": 73,
                            "parent": null
                        }
                    ],
                    "added_entities": [],
                    "deleted_entities": []
                },
                {
                    "descriptor": {
                        "old_range": {
                            "start": 61,
                            "length": 16
                        },
                        "new_range": {
                            "start": 62,
                            "length": 22
                        },
                        "section": "def setup_logging(config_uri, fileConfig=fileConfig,"
                    },
                    "line_group": {
                        "all_lines": [
                            {
                                "content": "",
                                "type": "context"
                            },
                            {
                                "content": "    ConfigParser defaults are specified for the special ``__file__``",
                                "type": "context"
                            },
                            {
                                "content": "    and ``here`` variables, similar to PasteDeploy config loading.",
                                "type": "context"
                            },
                            {
                                "content": "    Extra defaults can optionally be specified as a dict in ``global_conf``.",
                                "type": "added"
                            },
                            {
                                "content": "    \"\"\"",
                                "type": "context"
                            },
                            {
                                "content": "    path, _ = _getpathsec(config_uri, None)",
                                "type": "context"
                            },
                            {
                                "content": "    parser = configparser.ConfigParser()",
                                "type": "context"
                            },
                            {
                                "content": "    parser.read([path])",
                                "type": "context"
                            },
                            {
                                "content": "    if parser.has_section('loggers'):",
                                "type": "context"
                            },
                            {
                                "content": "        config_file = os.path.abspath(path)",
                                "type": "context"
                            },
                            {
                                "content": "        return fileConfig(",
                                "type": "deleted"
                            },
                            {
                                "content": "            config_file,",
                                "type": "deleted"
                            },
                            {
                                "content": "            dict(__file__=config_file, here=os.path.dirname(config_file))",
                                "type": "deleted"
                            },
                            {
                                "content": "            )",
                                "type": "deleted"
                            },
                            {
                                "content": "        if global_conf:",
                                "type": "added"
                            },
                            {
                                "content": "            # Copy to avoid side effects",
                                "type": "added"
                            },
                            {
                                "content": "            global_conf = dict(global_conf)",
                                "type": "added"
                            },
                            {
                                "content": "        else:",
                                "type": "added"
                            },
                            {
                                "content": "            global_conf = {}",
                                "type": "added"
                            },
                            {
                                "content": "        global_conf.update(",
                                "type": "added"
                            },
                            {
                                "content": "            __file__=config_file,",
                                "type": "added"
                            },
                            {
                                "content": "            here=os.path.dirname(config_file))",
                                "type": "added"
                            },
                            {
                                "content": "        return fileConfig(config_file, global_conf)",
                                "type": "added"
                            },
                            {
                                "content": "",
                                "type": "context"
                            },
                            {
                                "content": "def _getpathsec(config_uri, name):",
                                "type": "context"
                            },
                            {
                                "content": "    if '#' in config_uri:",
                                "type": "context"
                            }
                        ]
                    },
                    "modified_entities": [
                        {
                            "file_name": "pyramid/paster.py",
                            "type": "function",
                            "name": "setup_logging",
                            "content": "def setup_logging(config_uri, fileConfig=fileConfig,\n                  configparser=configparser):\n    \"\"\"\n    Set up logging via the logging module's fileConfig function with the\n    filename specified via ``config_uri`` (a string in the form\n    ``filename#sectionname``).\n\n    ConfigParser defaults are specified for the special ``__file__``\n    and ``here`` variables, similar to PasteDeploy config loading.\n    \"\"\"\n    path, _ = _getpathsec(config_uri, None)\n    parser = configparser.ConfigParser()\n    parser.read([path])\n    if parser.has_section('loggers'):\n        config_file = os.path.abspath(path)\n        return fileConfig(\n            config_file,\n            dict(__file__=config_file, here=os.path.dirname(config_file))\n            )",
                            "ast_type_str": "FunctionDef",
                            "start_lineno": 55,
                            "end_lineno": 73,
                            "parent": null
                        }
                    ],
                    "added_entities": [],
                    "deleted_entities": []
                }
            ]
        },
        {
            "old_file_content": "# (c) 2005 Ian Bicking and contributors; written for Paste\n# (http://pythonpaste.org) Licensed under the MIT license:\n# http://www.opensource.org/licenses/mit-license.php\n#\n# For discussion of daemonizing:\n# http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/278731\n#\n# Code taken also from QP: http://www.mems-exchange.org/software/qp/ From\n# lib/site.py\n\nimport atexit\nimport ctypes\nimport errno\nimport logging\nimport optparse\nimport os\nimport py_compile\nimport re\nimport subprocess\nimport sys\nimport tempfile\nimport textwrap\nimport threading\nimport time\nimport traceback\nimport webbrowser\n\nfrom paste.deploy import loadserver\nfrom paste.deploy import loadapp\nfrom paste.deploy.loadwsgi import loadcontext, SERVER\n\nfrom pyramid.compat import PY2\nfrom pyramid.compat import WIN\n\nfrom pyramid.paster import setup_logging\n\nfrom pyramid.scripts.common import parse_vars\n\nMAXFD = 1024\n\ntry:\n    import termios\nexcept ImportError: # pragma: no cover\n    termios = None\n\nif WIN and not hasattr(os, 'kill'): # pragma: no cover\n    # py 2.6 on windows\n    def kill(pid, sig=None):\n        \"\"\"kill function for Win32\"\"\"\n        # signal is ignored, semibogus raise message\n        kernel32 = ctypes.windll.kernel32\n        handle = kernel32.OpenProcess(1, 0, pid)\n        if (0 == kernel32.TerminateProcess(handle, 0)):\n            raise OSError('No such process %s' % pid)\nelse:\n    kill = os.kill\n\ndef main(argv=sys.argv, quiet=False):\n    command = PServeCommand(argv, quiet=quiet)\n    return command.run()\n\nclass DaemonizeException(Exception):\n    pass\n\nclass PServeCommand(object):\n\n    usage = '%prog config_uri [start|stop|restart|status] [var=value]'\n    description = \"\"\"\\\n    This command serves a web application that uses a PasteDeploy\n    configuration file for the server and application.\n\n    If start/stop/restart is given, then --daemon is implied, and it will\n    start (normal operation), stop (--stop-daemon), or do both.\n    Note: Daemonization features are deprecated.\n\n    You can also include variable assignments like 'http_port=8080'\n    and then use %(http_port)s in your config files.\n    \"\"\"\n    default_verbosity = 1\n\n    parser = optparse.OptionParser(\n        usage,\n        description=textwrap.dedent(description)\n        )\n    parser.add_option(\n        '-n', '--app-name',\n        dest='app_name',\n        metavar='NAME',\n        help=\"Load the named application (default main)\")\n    parser.add_option(\n        '-s', '--server',\n        dest='server',\n        metavar='SERVER_TYPE',\n        help=\"Use the named server.\")\n    parser.add_option(\n        '--server-name',\n        dest='server_name',\n        metavar='SECTION_NAME',\n        help=(\"Use the named server as defined in the configuration file \"\n              \"(default: main)\"))\n    if hasattr(os, 'fork'):\n        parser.add_option(\n            '--daemon',\n            dest=\"daemon\",\n            action=\"store_true\",\n            help=\"Run in daemon (background) mode [DEPRECATED]\")\n    parser.add_option(\n        '--pid-file',\n        dest='pid_file',\n        metavar='FILENAME',\n        help=(\"Save PID to file (default to pyramid.pid if running in \"\n              \"daemon mode) [DEPRECATED]\"))\n    parser.add_option(\n        '--log-file',\n        dest='log_file',\n        metavar='LOG_FILE',\n        help=\"Save output to the given log file (redirects stdout) [DEPRECATED]\")\n    parser.add_option(\n        '--reload',\n        dest='reload',\n        action='store_true',\n        help=\"Use auto-restart file monitor\")\n    parser.add_option(\n        '--reload-interval',\n        dest='reload_interval',\n        default=1,\n        help=(\"Seconds between checking files (low number can cause \"\n              \"significant CPU usage)\"))\n    parser.add_option(\n        '--monitor-restart',\n        dest='monitor_restart',\n        action='store_true',\n        help=\"Auto-restart server if it dies [DEPRECATED]\")\n    parser.add_option(\n        '-b', '--browser',\n        dest='browser',\n        action='store_true',\n        help=\"Open a web browser to server url\")\n    parser.add_option(\n        '--status',\n        action='store_true',\n        dest='show_status',\n        help=(\"Show the status of the (presumably daemonized) server \"\n              \"[DEPRECATED]\"))\n    parser.add_option(\n        '-v', '--verbose',\n        default=default_verbosity,\n        dest='verbose',\n        action='count',\n        help=\"Set verbose level (default \" + str(default_verbosity) + \")\")\n    parser.add_option(\n        '-q', '--quiet',\n        action='store_const',\n        const=0,\n        dest='verbose',\n        help=\"Suppress verbose output\")\n\n    if hasattr(os, 'setuid'):\n        # I don't think these are available on Windows\n        parser.add_option(\n            '--user',\n            dest='set_user',\n            metavar=\"USERNAME\",\n            help=\"Set the user (usually only possible when run as root)\")\n        parser.add_option(\n            '--group',\n            dest='set_group',\n            metavar=\"GROUP\",\n            help=\"Set the group (usually only possible when run as root)\")\n\n    parser.add_option(\n        '--stop-daemon',\n        dest='stop_daemon',\n        action='store_true',\n        help=('Stop a daemonized server (given a PID file, or default '\n              'pyramid.pid file) [DEPRECATED]'))\n\n    _scheme_re = re.compile(r'^[a-z][a-z]+:', re.I)\n\n    _reloader_environ_key = 'PYTHON_RELOADER_SHOULD_RUN'\n    _monitor_environ_key = 'PASTE_MONITOR_SHOULD_RUN'\n\n    possible_subcommands = ('start', 'stop', 'restart', 'status')\n\n    def __init__(self, argv, quiet=False):\n        self.options, self.args = self.parser.parse_args(argv[1:])\n        if quiet:\n            self.options.verbose = 0\n\n    def out(self, msg): # pragma: no cover\n        if self.options.verbose > 0:\n            print(msg)\n\n    def get_options(self):\n        if (\n                len(self.args) > 1 and\n                self.args[1] in self.possible_subcommands\n        ):\n            restvars = self.args[2:]\n        else:\n            restvars = self.args[1:]\n\n        return parse_vars(restvars)\n\n    def run(self):  # pragma: no cover\n        if self.options.stop_daemon:\n            self._warn_daemon_deprecated()\n            return self.stop_daemon()\n\n        if not hasattr(self.options, 'set_user'):\n            # Windows case:\n            self.options.set_user = self.options.set_group = None\n\n        # @@: Is this the right stage to set the user at?\n        if self.options.set_user or self.options.set_group:\n            self.change_user_group(\n                self.options.set_user, self.options.set_group)\n\n        if not self.args:\n            self.out('You must give a config file')\n            return 2\n        app_spec = self.args[0]\n\n        if (\n                len(self.args) > 1 and\n                self.args[1] in self.possible_subcommands\n        ):\n            cmd = self.args[1]\n        else:\n            cmd = None\n\n        if self.options.reload:\n            if (\n                getattr(self.options, 'daemon', False) or\n                cmd in ('start', 'stop', 'restart')\n            ):\n                self.out(\n                    'Error: Cannot use reloading while running as a dameon.')\n                return 2\n            if os.environ.get(self._reloader_environ_key):\n                if self.options.verbose > 1:\n                    self.out('Running reloading file monitor')\n                install_reloader(int(self.options.reload_interval), [app_spec])\n                # if self.requires_config_file:\n                #     watch_file(self.args[0])\n            else:\n                return self.restart_with_reloader()\n\n        if cmd not in (None, 'start', 'stop', 'restart', 'status'):\n            self.out(\n                'Error: must give start|stop|restart (not %s)' % cmd)\n            return 2\n\n        if cmd == 'status' or self.options.show_status:\n            self._warn_daemon_deprecated()\n            return self.show_status()\n\n        if cmd in ('restart', 'stop'):\n            self._warn_daemon_deprecated()\n            result = self.stop_daemon()\n            if result:\n                if cmd == 'restart':\n                    self.out(\"Could not stop daemon; aborting\")\n                else:\n                    self.out(\"Could not stop daemon\")\n                return result\n            if cmd == 'stop':\n                return result\n            self.options.daemon = True\n\n        if cmd == 'start':\n            self.options.daemon = True\n\n        app_name = self.options.app_name\n\n        vars = self.get_options()\n\n        if not self._scheme_re.search(app_spec):\n            app_spec = 'config:' + app_spec\n        server_name = self.options.server_name\n        if self.options.server:\n            server_spec = 'egg:pyramid'\n            assert server_name is None\n            server_name = self.options.server\n        else:\n            server_spec = app_spec\n        base = os.getcwd()\n\n        # warn before setting a default\n        if self.options.pid_file or self.options.log_file:\n            self._warn_daemon_deprecated()\n\n        if getattr(self.options, 'daemon', False):\n            if not self.options.pid_file:\n                self.options.pid_file = 'pyramid.pid'\n            if not self.options.log_file:\n                self.options.log_file = 'pyramid.log'\n\n        # Ensure the log file is writeable\n        if self.options.log_file:\n            try:\n                writeable_log_file = open(self.options.log_file, 'a')\n            except IOError as ioe:\n                msg = 'Error: Unable to write to log file: %s' % ioe\n                raise ValueError(msg)\n            writeable_log_file.close()\n\n        # Ensure the pid file is writeable\n        if self.options.pid_file:\n            try:\n                writeable_pid_file = open(self.options.pid_file, 'a')\n            except IOError as ioe:\n                msg = 'Error: Unable to write to pid file: %s' % ioe\n                raise ValueError(msg)\n            writeable_pid_file.close()\n\n        # warn before forking\n        if (\n                self.options.monitor_restart and\n                not os.environ.get(self._monitor_environ_key)\n        ):\n            self.out('''\\\n--monitor-restart has been deprecated in Pyramid 1.6. It will be removed\nin a future release per Pyramid's deprecation policy. Please consider using\na real process manager for your processes like Systemd, Circus, or Supervisor.\n''')\n\n        if (\n            getattr(self.options, 'daemon', False) and\n            not os.environ.get(self._monitor_environ_key)\n        ):\n            self._warn_daemon_deprecated()\n            try:\n                self.daemonize()\n            except DaemonizeException as ex:\n                if self.options.verbose > 0:\n                    self.out(str(ex))\n                return 2\n\n        if (\n            not os.environ.get(self._monitor_environ_key) and\n            self.options.pid_file\n        ):\n            self.record_pid(self.options.pid_file)\n\n        if (\n                self.options.monitor_restart and\n                not os.environ.get(self._monitor_environ_key)\n        ):\n            return self.restart_with_monitor()\n\n        if self.options.log_file:\n            stdout_log = LazyWriter(self.options.log_file, 'a')\n            sys.stdout = stdout_log\n            sys.stderr = stdout_log\n            logging.basicConfig(stream=stdout_log)\n\n        log_fn = app_spec\n        if log_fn.startswith('config:'):\n            log_fn = app_spec[len('config:'):]\n        elif log_fn.startswith('egg:'):\n            log_fn = None\n        if log_fn:\n            log_fn = os.path.join(base, log_fn)\n            setup_logging(log_fn)\n\n        server = self.loadserver(server_spec, name=server_name,\n                                 relative_to=base, global_conf=vars)\n\n        app = self.loadapp(app_spec, name=app_name, relative_to=base,\n                global_conf=vars)\n\n        if self.options.verbose > 0:\n            if hasattr(os, 'getpid'):\n                msg = 'Starting server in PID %i.' % os.getpid()\n            else:\n                msg = 'Starting server.'\n            self.out(msg)\n\n        def serve():\n            try:\n                server(app)\n            except (SystemExit, KeyboardInterrupt) as e:\n                if self.options.verbose > 1:\n                    raise\n                if str(e):\n                    msg = ' ' + str(e)\n                else:\n                    msg = ''\n                self.out('Exiting%s (-v to see traceback)' % msg)\n\n        if self.options.browser:\n            def open_browser():\n                context = loadcontext(SERVER, app_spec, name=server_name, relative_to=base,\n                        global_conf=vars)\n                url = 'http://127.0.0.1:{port}/'.format(**context.config())\n                time.sleep(1)\n                webbrowser.open(url)\n            t = threading.Thread(target=open_browser)\n            t.setDaemon(True)\n            t.start()\n\n        serve()\n\n    def loadapp(self, app_spec, name, relative_to, **kw): # pragma: no cover\n        return loadapp(app_spec, name=name, relative_to=relative_to, **kw)\n\n    def loadserver(self, server_spec, name, relative_to, **kw):# pragma:no cover\n        return loadserver(\n            server_spec, name=name, relative_to=relative_to, **kw)\n\n    def quote_first_command_arg(self, arg): # pragma: no cover\n        \"\"\"\n        There's a bug in Windows when running an executable that's\n        located inside a path with a space in it.  This method handles\n        that case, or on non-Windows systems or an executable with no\n        spaces, it just leaves well enough alone.\n        \"\"\"\n        if (sys.platform != 'win32' or ' ' not in arg):\n            # Problem does not apply:\n            return arg\n        try:\n            import win32api\n        except ImportError:\n            raise ValueError(\n                \"The executable %r contains a space, and in order to \"\n                \"handle this issue you must have the win32api module \"\n                \"installed\" % arg)\n        arg = win32api.GetShortPathName(arg)\n        return arg\n\n    def find_script_path(self, name): # pragma: no cover\n        \"\"\"\n        Return the path to the script being invoked by the python interpreter.\n\n        There's an issue on Windows when running the executable from\n        a console_script causing the script name (sys.argv[0]) to\n        not end with .exe or .py and thus cannot be run via popen.\n        \"\"\"\n        if sys.platform == 'win32':\n            if not name.endswith('.exe') and not name.endswith('.py'):\n                name += '.exe'\n        return name\n\n    def daemonize(self): # pragma: no cover\n        pid = live_pidfile(self.options.pid_file)\n        if pid:\n            raise DaemonizeException(\n                \"Daemon is already running (PID: %s from PID file %s)\"\n                % (pid, self.options.pid_file))\n\n        if self.options.verbose > 0:\n            self.out('Entering daemon mode')\n        pid = os.fork()\n        if pid:\n            # The forked process also has a handle on resources, so we\n            # *don't* want proper termination of the process, we just\n            # want to exit quick (which os._exit() does)\n            os._exit(0)\n        # Make this the session leader\n        os.setsid()\n        # Fork again for good measure!\n        pid = os.fork()\n        if pid:\n            os._exit(0)\n\n        # @@: Should we set the umask and cwd now?\n\n        import resource  # Resource usage information.\n        maxfd = resource.getrlimit(resource.RLIMIT_NOFILE)[1]\n        if (maxfd == resource.RLIM_INFINITY):\n            maxfd = MAXFD\n        # Iterate through and close all file descriptors.\n        for fd in range(0, maxfd):\n            try:\n                os.close(fd)\n            except OSError:  # ERROR, fd wasn't open to begin with (ignored)\n                pass\n\n        if (hasattr(os, \"devnull\")):\n            REDIRECT_TO = os.devnull\n        else:\n            REDIRECT_TO = \"/dev/null\"\n        os.open(REDIRECT_TO, os.O_RDWR)  # standard input (0)\n        # Duplicate standard input to standard output and standard error.\n        os.dup2(0, 1)  # standard output (1)\n        os.dup2(0, 2)  # standard error (2)\n\n    def _remove_pid_file(self, written_pid, filename, verbosity):\n        current_pid = os.getpid()\n        if written_pid != current_pid:\n            # A forked process must be exiting, not the process that\n            # wrote the PID file\n            return\n        if not os.path.exists(filename):\n            return\n        with open(filename) as f:\n            content = f.read().strip()\n        try:\n            pid_in_file = int(content)\n        except ValueError:\n            pass\n        else:\n            if pid_in_file != current_pid:\n                msg = \"PID file %s contains %s, not expected PID %s\"\n                self.out(msg % (filename, pid_in_file, current_pid))\n                return\n        if verbosity > 0:\n            self.out(\"Removing PID file %s\" % filename)\n        try:\n            os.unlink(filename)\n            return\n        except OSError as e:\n            # Record, but don't give traceback\n            self.out(\"Cannot remove PID file: (%s)\" % e)\n        # well, at least lets not leave the invalid PID around...\n        try:\n            with open(filename, 'w') as f:\n                f.write('')\n        except OSError as e:\n            self.out('Stale PID left in file: %s (%s)' % (filename, e))\n        else:\n            self.out('Stale PID removed')\n\n    def record_pid(self, pid_file):\n        pid = os.getpid()\n        if self.options.verbose > 1:\n            self.out('Writing PID %s to %s' % (pid, pid_file))\n        with open(pid_file, 'w') as f:\n            f.write(str(pid))\n        atexit.register(self._remove_pid_file, pid, pid_file, self.options.verbose)\n\n    def stop_daemon(self): # pragma: no cover\n        pid_file = self.options.pid_file or 'pyramid.pid'\n        if not os.path.exists(pid_file):\n            self.out('No PID file exists in %s' % pid_file)\n            return 1\n        pid = read_pidfile(pid_file)\n        if not pid:\n            self.out(\"Not a valid PID file in %s\" % pid_file)\n            return 1\n        pid = live_pidfile(pid_file)\n        if not pid:\n            self.out(\"PID in %s is not valid (deleting)\" % pid_file)\n            try:\n                os.unlink(pid_file)\n            except (OSError, IOError) as e:\n                self.out(\"Could not delete: %s\" % e)\n                return 2\n            return 1\n        for j in range(10):\n            if not live_pidfile(pid_file):\n                break\n            import signal\n            kill(pid, signal.SIGTERM)\n            time.sleep(1)\n        else:\n            self.out(\"failed to kill web process %s\" % pid)\n            return 3\n        if os.path.exists(pid_file):\n            os.unlink(pid_file)\n        return 0\n\n    def show_status(self): # pragma: no cover\n        pid_file = self.options.pid_file or 'pyramid.pid'\n        if not os.path.exists(pid_file):\n            self.out('No PID file %s' % pid_file)\n            return 1\n        pid = read_pidfile(pid_file)\n        if not pid:\n            self.out('No PID in file %s' % pid_file)\n            return 1\n        pid = live_pidfile(pid_file)\n        if not pid:\n            self.out('PID %s in %s is not running' % (pid, pid_file))\n            return 1\n        self.out('Server running in PID %s' % pid)\n        return 0\n\n    def restart_with_reloader(self): # pragma: no cover\n        self.restart_with_monitor(reloader=True)\n\n    def restart_with_monitor(self, reloader=False): # pragma: no cover\n        if self.options.verbose > 0:\n            if reloader:\n                self.out('Starting subprocess with file monitor')\n            else:\n                self.out('Starting subprocess with monitor parent')\n        while 1:\n            args = [\n                self.quote_first_command_arg(sys.executable),\n                self.find_script_path(sys.argv[0]),\n            ] + sys.argv[1:]\n            new_environ = os.environ.copy()\n            if reloader:\n                new_environ[self._reloader_environ_key] = 'true'\n            else:\n                new_environ[self._monitor_environ_key] = 'true'\n            proc = None\n            try:\n                try:\n                    _turn_sigterm_into_systemexit()\n                    proc = subprocess.Popen(args, env=new_environ)\n                    exit_code = proc.wait()\n                    proc = None\n                except KeyboardInterrupt:\n                    self.out('^C caught in monitor process')\n                    if self.options.verbose > 1:\n                        raise\n                    return 1\n            finally:\n                if proc is not None:\n                    import signal\n                    try:\n                        kill(proc.pid, signal.SIGTERM)\n                    except (OSError, IOError):\n                        pass\n\n            if reloader:\n                # Reloader always exits with code 3; but if we are\n                # a monitor, any exit code will restart\n                if exit_code != 3:\n                    return exit_code\n            if self.options.verbose > 0:\n                self.out('%s %s %s' % ('-' * 20, 'Restarting', '-' * 20))\n\n    def change_user_group(self, user, group): # pragma: no cover\n        import pwd\n        import grp\n\n        self.out('''\\\nThe --user and --group options have been deprecated in Pyramid 1.6. They will\nbe removed in a future release per Pyramid's deprecation policy. Please\nconsider using a real process manager for your processes like Systemd, Circus,\nor Supervisor, all of which support process security.\n''')\n\n        uid = gid = None\n        if group:\n            try:\n                gid = int(group)\n                group = grp.getgrgid(gid).gr_name\n            except ValueError:\n                import grp\n                try:\n                    entry = grp.getgrnam(group)\n                except KeyError:\n                    raise ValueError(\n                        \"Bad group: %r; no such group exists\" % group)\n                gid = entry.gr_gid\n        try:\n            uid = int(user)\n            user = pwd.getpwuid(uid).pw_name\n        except ValueError:\n            try:\n                entry = pwd.getpwnam(user)\n            except KeyError:\n                raise ValueError(\n                    \"Bad username: %r; no such user exists\" % user)\n            if not gid:\n                gid = entry.pw_gid\n            uid = entry.pw_uid\n        if self.options.verbose > 0:\n            self.out('Changing user to %s:%s (%s:%s)' % (\n                user, group or '(unknown)', uid, gid))\n        if gid:\n            os.setgid(gid)\n        if uid:\n            os.setuid(uid)\n\n    def _warn_daemon_deprecated(self):\n        self.out('''\\\nThe daemon options have been deprecated in Pyramid 1.6. They will be removed\nin a future release per Pyramid's deprecation policy. Please consider using\na real process manager for your processes like Systemd, Circus, or Supervisor.\n\nThe following commands are deprecated:\n    [start,stop,restart,status] --daemon, --stop-server, --status, --pid-file, --log-file\n''')\n\nclass LazyWriter(object):\n\n    \"\"\"\n    File-like object that opens a file lazily when it is first written\n    to.\n    \"\"\"\n\n    def __init__(self, filename, mode='w'):\n        self.filename = filename\n        self.fileobj = None\n        self.lock = threading.Lock()\n        self.mode = mode\n\n    def open(self):\n        if self.fileobj is None:\n            with self.lock:\n                self.fileobj = open(self.filename, self.mode)\n        return self.fileobj\n\n    def close(self):\n        fileobj = self.fileobj\n        if fileobj is not None:\n            fileobj.close()\n\n    def __del__(self):\n        self.close()\n\n    def write(self, text):\n        fileobj = self.open()\n        fileobj.write(text)\n        fileobj.flush()\n\n    def writelines(self, text):\n        fileobj = self.open()\n        fileobj.writelines(text)\n        fileobj.flush()\n\n    def flush(self):\n        self.open().flush()\n\ndef live_pidfile(pidfile): # pragma: no cover\n    \"\"\"(pidfile:str) -> int | None\n    Returns an int found in the named file, if there is one,\n    and if there is a running process with that process id.\n    Return None if no such process exists.\n    \"\"\"\n    pid = read_pidfile(pidfile)\n    if pid:\n        try:\n            kill(int(pid), 0)\n            return pid\n        except OSError as e:\n            if e.errno == errno.EPERM:\n                return pid\n    return None\n\ndef read_pidfile(filename):\n    if os.path.exists(filename):\n        try:\n            with open(filename) as f:\n                content = f.read()\n            return int(content.strip())\n        except (ValueError, IOError):\n            return None\n    else:\n        return None\n\ndef ensure_port_cleanup(\n    bound_addresses, maxtries=30, sleeptime=2): # pragma: no cover\n    \"\"\"\n    This makes sure any open ports are closed.\n\n    Does this by connecting to them until they give connection\n    refused.  Servers should call like::\n\n        ensure_port_cleanup([80, 443])\n    \"\"\"\n    atexit.register(_cleanup_ports, bound_addresses, maxtries=maxtries,\n                    sleeptime=sleeptime)\n\ndef _cleanup_ports(\n    bound_addresses, maxtries=30, sleeptime=2): # pragma: no cover\n    # Wait for the server to bind to the port.\n    import socket\n    import errno\n    for bound_address in bound_addresses:\n        for attempt in range(maxtries):\n            sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\n            try:\n                sock.connect(bound_address)\n            except socket.error as e:\n                if e.args[0] != errno.ECONNREFUSED:\n                    raise\n                break\n            else:\n                time.sleep(sleeptime)\n        else:\n            raise SystemExit('Timeout waiting for port.')\n        sock.close()\n\ndef _turn_sigterm_into_systemexit(): # pragma: no cover\n    \"\"\"\n    Attempts to turn a SIGTERM exception into a SystemExit exception.\n    \"\"\"\n    try:\n        import signal\n    except ImportError:\n        return\n    def handle_term(signo, frame):\n        raise SystemExit\n    signal.signal(signal.SIGTERM, handle_term)\n\ndef ensure_echo_on(): # pragma: no cover\n    if termios:\n        fd = sys.stdin\n        if fd.isatty():\n            attr_list = termios.tcgetattr(fd)\n            if not attr_list[3] & termios.ECHO:\n                attr_list[3] |= termios.ECHO\n                termios.tcsetattr(fd, termios.TCSANOW, attr_list)\n\ndef install_reloader(poll_interval=1, extra_files=None): # pragma: no cover\n    \"\"\"\n    Install the reloading monitor.\n\n    On some platforms server threads may not terminate when the main\n    thread does, causing ports to remain open/locked.\n    \"\"\"\n    ensure_echo_on()\n    mon = Monitor(poll_interval=poll_interval)\n    if extra_files is None:\n        extra_files = []\n    mon.extra_files.extend(extra_files)\n    t = threading.Thread(target=mon.periodic_reload)\n    t.setDaemon(True)\n    t.start()\n\nclass classinstancemethod(object):\n    \"\"\"\n    Acts like a class method when called from a class, like an\n    instance method when called by an instance.  The method should\n    take two arguments, 'self' and 'cls'; one of these will be None\n    depending on how the method was called.\n    \"\"\"\n\n    def __init__(self, func):\n        self.func = func\n        self.__doc__ = func.__doc__\n\n    def __get__(self, obj, type=None):\n        return _methodwrapper(self.func, obj=obj, type=type)\n\nclass _methodwrapper(object):\n\n    def __init__(self, func, obj, type):\n        self.func = func\n        self.obj = obj\n        self.type = type\n\n    def __call__(self, *args, **kw):\n        assert 'self' not in kw and 'cls' not in kw, (\n            \"You cannot use 'self' or 'cls' arguments to a \"\n            \"classinstancemethod\")\n        return self.func(*((self.obj, self.type) + args), **kw)\n\n\nclass Monitor(object): # pragma: no cover\n    \"\"\"\n    A file monitor and server restarter.\n\n    Use this like:\n\n    ..code-block:: Python\n\n        install_reloader()\n\n    Then make sure your server is installed with a shell script like::\n\n        err=3\n        while test \"$err\" -eq 3 ; do\n            python server.py\n            err=\"$?\"\n        done\n\n    or is run from this .bat file (if you use Windows)::\n\n        @echo off\n        :repeat\n            python server.py\n        if %errorlevel% == 3 goto repeat\n\n    or run a monitoring process in Python (``pserve --reload`` does\n    this).\n\n    Use the ``watch_file(filename)`` function to cause a reload/restart for\n    other non-Python files (e.g., configuration files).  If you have\n    a dynamic set of files that grows over time you can use something like::\n\n        def watch_config_files():\n            return CONFIG_FILE_CACHE.keys()\n        add_file_callback(watch_config_files)\n\n    Then every time the reloader polls files it will call\n    ``watch_config_files`` and check all the filenames it returns.\n    \"\"\"\n    instances = []\n    global_extra_files = []\n    global_file_callbacks = []\n\n    def __init__(self, poll_interval):\n        self.module_mtimes = {}\n        self.keep_running = True\n        self.poll_interval = poll_interval\n        self.extra_files = list(self.global_extra_files)\n        self.instances.append(self)\n        self.syntax_error_files = set()\n        self.pending_reload = False\n        self.file_callbacks = list(self.global_file_callbacks)\n        temp_pyc_fp = tempfile.NamedTemporaryFile(delete=False)\n        self.temp_pyc = temp_pyc_fp.name\n        temp_pyc_fp.close()\n\n    def _exit(self):\n        try:\n            os.unlink(self.temp_pyc)\n        except IOError:\n            # not worried if the tempfile can't be removed\n            pass\n        # use os._exit() here and not sys.exit() since within a\n        # thread sys.exit() just closes the given thread and\n        # won't kill the process; note os._exit does not call\n        # any atexit callbacks, nor does it do finally blocks,\n        # flush open files, etc.  In otherwords, it is rude.\n        os._exit(3)\n\n    def periodic_reload(self):\n        while True:\n            if not self.check_reload():\n                self._exit()\n                break\n            time.sleep(self.poll_interval)\n\n    def check_reload(self):\n        filenames = list(self.extra_files)\n        for file_callback in self.file_callbacks:\n            try:\n                filenames.extend(file_callback())\n            except:\n                print(\n                    \"Error calling reloader callback %r:\" % file_callback)\n                traceback.print_exc()\n        for module in list(sys.modules.values()):\n            try:\n                filename = module.__file__\n            except (AttributeError, ImportError):\n                continue\n            if filename is not None:\n                filenames.append(filename)\n        new_changes = False\n        for filename in filenames:\n            try:\n                stat = os.stat(filename)\n                if stat:\n                    mtime = stat.st_mtime\n                else:\n                    mtime = 0\n            except (OSError, IOError):\n                continue\n            if filename.endswith('.pyc') and os.path.exists(filename[:-1]):\n                mtime = max(os.stat(filename[:-1]).st_mtime, mtime)\n                pyc = True\n            else:\n                pyc = False\n            old_mtime = self.module_mtimes.get(filename)\n            self.module_mtimes[filename] = mtime\n            if old_mtime is not None and old_mtime < mtime:\n                new_changes = True\n                if pyc:\n                    filename = filename[:-1]\n                is_valid = True\n                if filename.endswith('.py'):\n                    is_valid = self.check_syntax(filename)\n                if is_valid:\n                    print(\"%s changed ...\" % filename)\n        if new_changes:\n            self.pending_reload = True\n            if self.syntax_error_files:\n                for filename in sorted(self.syntax_error_files):\n                    print(\"%s has a SyntaxError; NOT reloading.\" % filename)\n        if self.pending_reload and not self.syntax_error_files:\n            self.pending_reload = False\n            return False\n        return True\n\n    def check_syntax(self, filename):\n        # check if a file has syntax errors.\n        # If so, track it until it's fixed.\n        try:\n            py_compile.compile(filename, cfile=self.temp_pyc, doraise=True)\n        except py_compile.PyCompileError as ex:\n            print(ex.msg)\n            self.syntax_error_files.add(filename)\n            return False\n        else:\n            if filename in self.syntax_error_files:\n                self.syntax_error_files.remove(filename)\n        return True\n\n    def watch_file(self, cls, filename):\n        \"\"\"Watch the named file for changes\"\"\"\n        filename = os.path.abspath(filename)\n        if self is None:\n            for instance in cls.instances:\n                instance.watch_file(filename)\n            cls.global_extra_files.append(filename)\n        else:\n            self.extra_files.append(filename)\n\n    watch_file = classinstancemethod(watch_file)\n\n    def add_file_callback(self, cls, callback):\n        \"\"\"Add a callback -- a function that takes no parameters -- that will\n        return a list of filenames to watch for changes.\"\"\"\n        if self is None:\n            for instance in cls.instances:\n                instance.add_file_callback(callback)\n            cls.global_file_callbacks.append(callback)\n        else:\n            self.file_callbacks.append(callback)\n\n    add_file_callback = classinstancemethod(add_file_callback)\n\nwatch_file = Monitor.watch_file\nadd_file_callback = Monitor.add_file_callback\n\n# For paste.deploy server instantiation (egg:pyramid#wsgiref)\ndef wsgiref_server_runner(wsgi_app, global_conf, **kw): # pragma: no cover\n    from wsgiref.simple_server import make_server\n    host = kw.get('host', '0.0.0.0')\n    port = int(kw.get('port', 8080))\n    server = make_server(host, port, wsgi_app)\n    print('Starting HTTP server on http://%s:%s' % (host, port))\n    server.serve_forever()\n\n# For paste.deploy server instantiation (egg:pyramid#cherrypy)\ndef cherrypy_server_runner(\n        app, global_conf=None, host='127.0.0.1', port=None,\n        ssl_pem=None, protocol_version=None, numthreads=None,\n        server_name=None, max=None, request_queue_size=None,\n        timeout=None\n        ): # pragma: no cover\n    \"\"\"\n    Entry point for CherryPy's WSGI server\n\n    Serves the specified WSGI app via CherryPyWSGIServer.\n\n    ``app``\n\n        The WSGI 'application callable'; multiple WSGI applications\n        may be passed as (script_name, callable) pairs.\n\n    ``host``\n\n        This is the ipaddress to bind to (or a hostname if your\n        nameserver is properly configured).  This defaults to\n        127.0.0.1, which is not a public interface.\n\n    ``port``\n\n        The port to run on, defaults to 8080 for HTTP, or 4443 for\n        HTTPS. This can be a string or an integer value.\n\n    ``ssl_pem``\n\n        This an optional SSL certificate file (via OpenSSL) You can\n        generate a self-signed test PEM certificate file as follows:\n\n            $ openssl genrsa 1024 > host.key\n            $ chmod 400 host.key\n            $ openssl req -new -x509 -nodes -sha1 -days 365  \\\\\n                          -key host.key > host.cert\n            $ cat host.cert host.key > host.pem\n            $ chmod 400 host.pem\n\n    ``protocol_version``\n\n        The protocol used by the server, by default ``HTTP/1.1``.\n\n    ``numthreads``\n\n        The number of worker threads to create.\n\n    ``server_name``\n\n        The string to set for WSGI's SERVER_NAME environ entry.\n\n    ``max``\n\n        The maximum number of queued requests. (defaults to -1 = no\n        limit).\n\n    ``request_queue_size``\n\n        The 'backlog' argument to socket.listen(); specifies the\n        maximum number of queued connections.\n\n    ``timeout``\n\n        The timeout in seconds for accepted connections.\n    \"\"\"\n    is_ssl = False\n    if ssl_pem:\n        port = port or 4443\n        is_ssl = True\n\n    if not port:\n        if ':' in host:\n            host, port = host.split(':', 1)\n        else:\n            port = 8080\n    bind_addr = (host, int(port))\n\n    kwargs = {}\n    for var_name in ('numthreads', 'max', 'request_queue_size', 'timeout'):\n        var = locals()[var_name]\n        if var is not None:\n            kwargs[var_name] = int(var)\n\n    from cherrypy import wsgiserver\n\n    server = wsgiserver.CherryPyWSGIServer(bind_addr, app,\n                                           server_name=server_name, **kwargs)\n    if ssl_pem is not None:\n        if PY2:\n            server.ssl_certificate = server.ssl_private_key = ssl_pem\n        else:\n            # creates wsgiserver.ssl_builtin as side-effect\n            wsgiserver.get_ssl_adapter_class()\n            server.ssl_adapter = wsgiserver.ssl_builtin.BuiltinSSLAdapter(\n                ssl_pem, ssl_pem)\n\n    if protocol_version:\n        server.protocol = protocol_version\n\n    try:\n        protocol = is_ssl and 'https' or 'http'\n        if host == '0.0.0.0':\n            print('serving on 0.0.0.0:%s view at %s://127.0.0.1:%s' %\n                  (port, protocol, port))\n        else:\n            print('serving on %s://%s:%s' % (protocol, host, port))\n        server.start()\n    except (KeyboardInterrupt, SystemExit):\n        server.stop()\n\n    return server\n\nif __name__ == '__main__': # pragma: no cover\n    sys.exit(main() or 0)\n",
            "new_file_content": "# (c) 2005 Ian Bicking and contributors; written for Paste\n# (http://pythonpaste.org) Licensed under the MIT license:\n# http://www.opensource.org/licenses/mit-license.php\n#\n# For discussion of daemonizing:\n# http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/278731\n#\n# Code taken also from QP: http://www.mems-exchange.org/software/qp/ From\n# lib/site.py\n\nimport atexit\nimport ctypes\nimport errno\nimport logging\nimport optparse\nimport os\nimport py_compile\nimport re\nimport subprocess\nimport sys\nimport tempfile\nimport textwrap\nimport threading\nimport time\nimport traceback\nimport webbrowser\n\nfrom paste.deploy import loadserver\nfrom paste.deploy import loadapp\nfrom paste.deploy.loadwsgi import loadcontext, SERVER\n\nfrom pyramid.compat import PY2\nfrom pyramid.compat import WIN\n\nfrom pyramid.paster import setup_logging\n\nfrom pyramid.scripts.common import parse_vars\n\nMAXFD = 1024\n\ntry:\n    import termios\nexcept ImportError: # pragma: no cover\n    termios = None\n\nif WIN and not hasattr(os, 'kill'): # pragma: no cover\n    # py 2.6 on windows\n    def kill(pid, sig=None):\n        \"\"\"kill function for Win32\"\"\"\n        # signal is ignored, semibogus raise message\n        kernel32 = ctypes.windll.kernel32\n        handle = kernel32.OpenProcess(1, 0, pid)\n        if (0 == kernel32.TerminateProcess(handle, 0)):\n            raise OSError('No such process %s' % pid)\nelse:\n    kill = os.kill\n\ndef main(argv=sys.argv, quiet=False):\n    command = PServeCommand(argv, quiet=quiet)\n    return command.run()\n\nclass DaemonizeException(Exception):\n    pass\n\nclass PServeCommand(object):\n\n    usage = '%prog config_uri [start|stop|restart|status] [var=value]'\n    description = \"\"\"\\\n    This command serves a web application that uses a PasteDeploy\n    configuration file for the server and application.\n\n    If start/stop/restart is given, then --daemon is implied, and it will\n    start (normal operation), stop (--stop-daemon), or do both.\n    Note: Daemonization features are deprecated.\n\n    You can also include variable assignments like 'http_port=8080'\n    and then use %(http_port)s in your config files.\n    \"\"\"\n    default_verbosity = 1\n\n    parser = optparse.OptionParser(\n        usage,\n        description=textwrap.dedent(description)\n        )\n    parser.add_option(\n        '-n', '--app-name',\n        dest='app_name',\n        metavar='NAME',\n        help=\"Load the named application (default main)\")\n    parser.add_option(\n        '-s', '--server',\n        dest='server',\n        metavar='SERVER_TYPE',\n        help=\"Use the named server.\")\n    parser.add_option(\n        '--server-name',\n        dest='server_name',\n        metavar='SECTION_NAME',\n        help=(\"Use the named server as defined in the configuration file \"\n              \"(default: main)\"))\n    if hasattr(os, 'fork'):\n        parser.add_option(\n            '--daemon',\n            dest=\"daemon\",\n            action=\"store_true\",\n            help=\"Run in daemon (background) mode [DEPRECATED]\")\n    parser.add_option(\n        '--pid-file',\n        dest='pid_file',\n        metavar='FILENAME',\n        help=(\"Save PID to file (default to pyramid.pid if running in \"\n              \"daemon mode) [DEPRECATED]\"))\n    parser.add_option(\n        '--log-file',\n        dest='log_file',\n        metavar='LOG_FILE',\n        help=\"Save output to the given log file (redirects stdout) [DEPRECATED]\")\n    parser.add_option(\n        '--reload',\n        dest='reload',\n        action='store_true',\n        help=\"Use auto-restart file monitor\")\n    parser.add_option(\n        '--reload-interval',\n        dest='reload_interval',\n        default=1,\n        help=(\"Seconds between checking files (low number can cause \"\n              \"significant CPU usage)\"))\n    parser.add_option(\n        '--monitor-restart',\n        dest='monitor_restart',\n        action='store_true',\n        help=\"Auto-restart server if it dies [DEPRECATED]\")\n    parser.add_option(\n        '-b', '--browser',\n        dest='browser',\n        action='store_true',\n        help=\"Open a web browser to server url\")\n    parser.add_option(\n        '--status',\n        action='store_true',\n        dest='show_status',\n        help=(\"Show the status of the (presumably daemonized) server \"\n              \"[DEPRECATED]\"))\n    parser.add_option(\n        '-v', '--verbose',\n        default=default_verbosity,\n        dest='verbose',\n        action='count',\n        help=\"Set verbose level (default \" + str(default_verbosity) + \")\")\n    parser.add_option(\n        '-q', '--quiet',\n        action='store_const',\n        const=0,\n        dest='verbose',\n        help=\"Suppress verbose output\")\n\n    if hasattr(os, 'setuid'):\n        # I don't think these are available on Windows\n        parser.add_option(\n            '--user',\n            dest='set_user',\n            metavar=\"USERNAME\",\n            help=\"Set the user (usually only possible when run as root)\")\n        parser.add_option(\n            '--group',\n            dest='set_group',\n            metavar=\"GROUP\",\n            help=\"Set the group (usually only possible when run as root)\")\n\n    parser.add_option(\n        '--stop-daemon',\n        dest='stop_daemon',\n        action='store_true',\n        help=('Stop a daemonized server (given a PID file, or default '\n              'pyramid.pid file) [DEPRECATED]'))\n\n    _scheme_re = re.compile(r'^[a-z][a-z]+:', re.I)\n\n    _reloader_environ_key = 'PYTHON_RELOADER_SHOULD_RUN'\n    _monitor_environ_key = 'PASTE_MONITOR_SHOULD_RUN'\n\n    possible_subcommands = ('start', 'stop', 'restart', 'status')\n\n    def __init__(self, argv, quiet=False):\n        self.options, self.args = self.parser.parse_args(argv[1:])\n        if quiet:\n            self.options.verbose = 0\n\n    def out(self, msg): # pragma: no cover\n        if self.options.verbose > 0:\n            print(msg)\n\n    def get_options(self):\n        if (\n                len(self.args) > 1 and\n                self.args[1] in self.possible_subcommands\n        ):\n            restvars = self.args[2:]\n        else:\n            restvars = self.args[1:]\n\n        return parse_vars(restvars)\n\n    def run(self):  # pragma: no cover\n        if self.options.stop_daemon:\n            self._warn_daemon_deprecated()\n            return self.stop_daemon()\n\n        if not hasattr(self.options, 'set_user'):\n            # Windows case:\n            self.options.set_user = self.options.set_group = None\n\n        # @@: Is this the right stage to set the user at?\n        if self.options.set_user or self.options.set_group:\n            self.change_user_group(\n                self.options.set_user, self.options.set_group)\n\n        if not self.args:\n            self.out('You must give a config file')\n            return 2\n        app_spec = self.args[0]\n\n        if (\n                len(self.args) > 1 and\n                self.args[1] in self.possible_subcommands\n        ):\n            cmd = self.args[1]\n        else:\n            cmd = None\n\n        if self.options.reload:\n            if (\n                getattr(self.options, 'daemon', False) or\n                cmd in ('start', 'stop', 'restart')\n            ):\n                self.out(\n                    'Error: Cannot use reloading while running as a dameon.')\n                return 2\n            if os.environ.get(self._reloader_environ_key):\n                if self.options.verbose > 1:\n                    self.out('Running reloading file monitor')\n                install_reloader(int(self.options.reload_interval), [app_spec])\n                # if self.requires_config_file:\n                #     watch_file(self.args[0])\n            else:\n                return self.restart_with_reloader()\n\n        if cmd not in (None, 'start', 'stop', 'restart', 'status'):\n            self.out(\n                'Error: must give start|stop|restart (not %s)' % cmd)\n            return 2\n\n        if cmd == 'status' or self.options.show_status:\n            self._warn_daemon_deprecated()\n            return self.show_status()\n\n        if cmd in ('restart', 'stop'):\n            self._warn_daemon_deprecated()\n            result = self.stop_daemon()\n            if result:\n                if cmd == 'restart':\n                    self.out(\"Could not stop daemon; aborting\")\n                else:\n                    self.out(\"Could not stop daemon\")\n                return result\n            if cmd == 'stop':\n                return result\n            self.options.daemon = True\n\n        if cmd == 'start':\n            self.options.daemon = True\n\n        app_name = self.options.app_name\n\n        vars = self.get_options()\n\n        if not self._scheme_re.search(app_spec):\n            app_spec = 'config:' + app_spec\n        server_name = self.options.server_name\n        if self.options.server:\n            server_spec = 'egg:pyramid'\n            assert server_name is None\n            server_name = self.options.server\n        else:\n            server_spec = app_spec\n        base = os.getcwd()\n\n        # warn before setting a default\n        if self.options.pid_file or self.options.log_file:\n            self._warn_daemon_deprecated()\n\n        if getattr(self.options, 'daemon', False):\n            if not self.options.pid_file:\n                self.options.pid_file = 'pyramid.pid'\n            if not self.options.log_file:\n                self.options.log_file = 'pyramid.log'\n\n        # Ensure the log file is writeable\n        if self.options.log_file:\n            try:\n                writeable_log_file = open(self.options.log_file, 'a')\n            except IOError as ioe:\n                msg = 'Error: Unable to write to log file: %s' % ioe\n                raise ValueError(msg)\n            writeable_log_file.close()\n\n        # Ensure the pid file is writeable\n        if self.options.pid_file:\n            try:\n                writeable_pid_file = open(self.options.pid_file, 'a')\n            except IOError as ioe:\n                msg = 'Error: Unable to write to pid file: %s' % ioe\n                raise ValueError(msg)\n            writeable_pid_file.close()\n\n        # warn before forking\n        if (\n                self.options.monitor_restart and\n                not os.environ.get(self._monitor_environ_key)\n        ):\n            self.out('''\\\n--monitor-restart has been deprecated in Pyramid 1.6. It will be removed\nin a future release per Pyramid's deprecation policy. Please consider using\na real process manager for your processes like Systemd, Circus, or Supervisor.\n''')\n\n        if (\n            getattr(self.options, 'daemon', False) and\n            not os.environ.get(self._monitor_environ_key)\n        ):\n            self._warn_daemon_deprecated()\n            try:\n                self.daemonize()\n            except DaemonizeException as ex:\n                if self.options.verbose > 0:\n                    self.out(str(ex))\n                return 2\n\n        if (\n            not os.environ.get(self._monitor_environ_key) and\n            self.options.pid_file\n        ):\n            self.record_pid(self.options.pid_file)\n\n        if (\n                self.options.monitor_restart and\n                not os.environ.get(self._monitor_environ_key)\n        ):\n            return self.restart_with_monitor()\n\n        if self.options.log_file:\n            stdout_log = LazyWriter(self.options.log_file, 'a')\n            sys.stdout = stdout_log\n            sys.stderr = stdout_log\n            logging.basicConfig(stream=stdout_log)\n\n        log_fn = app_spec\n        if log_fn.startswith('config:'):\n            log_fn = app_spec[len('config:'):]\n        elif log_fn.startswith('egg:'):\n            log_fn = None\n        if log_fn:\n            log_fn = os.path.join(base, log_fn)\n            setup_logging(log_fn, global_conf=vars)\n\n        server = self.loadserver(server_spec, name=server_name,\n                                 relative_to=base, global_conf=vars)\n\n        app = self.loadapp(app_spec, name=app_name, relative_to=base,\n                global_conf=vars)\n\n        if self.options.verbose > 0:\n            if hasattr(os, 'getpid'):\n                msg = 'Starting server in PID %i.' % os.getpid()\n            else:\n                msg = 'Starting server.'\n            self.out(msg)\n\n        def serve():\n            try:\n                server(app)\n            except (SystemExit, KeyboardInterrupt) as e:\n                if self.options.verbose > 1:\n                    raise\n                if str(e):\n                    msg = ' ' + str(e)\n                else:\n                    msg = ''\n                self.out('Exiting%s (-v to see traceback)' % msg)\n\n        if self.options.browser:\n            def open_browser():\n                context = loadcontext(SERVER, app_spec, name=server_name, relative_to=base,\n                        global_conf=vars)\n                url = 'http://127.0.0.1:{port}/'.format(**context.config())\n                time.sleep(1)\n                webbrowser.open(url)\n            t = threading.Thread(target=open_browser)\n            t.setDaemon(True)\n            t.start()\n\n        serve()\n\n    def loadapp(self, app_spec, name, relative_to, **kw): # pragma: no cover\n        return loadapp(app_spec, name=name, relative_to=relative_to, **kw)\n\n    def loadserver(self, server_spec, name, relative_to, **kw):# pragma:no cover\n        return loadserver(\n            server_spec, name=name, relative_to=relative_to, **kw)\n\n    def quote_first_command_arg(self, arg): # pragma: no cover\n        \"\"\"\n        There's a bug in Windows when running an executable that's\n        located inside a path with a space in it.  This method handles\n        that case, or on non-Windows systems or an executable with no\n        spaces, it just leaves well enough alone.\n        \"\"\"\n        if (sys.platform != 'win32' or ' ' not in arg):\n            # Problem does not apply:\n            return arg\n        try:\n            import win32api\n        except ImportError:\n            raise ValueError(\n                \"The executable %r contains a space, and in order to \"\n                \"handle this issue you must have the win32api module \"\n                \"installed\" % arg)\n        arg = win32api.GetShortPathName(arg)\n        return arg\n\n    def find_script_path(self, name): # pragma: no cover\n        \"\"\"\n        Return the path to the script being invoked by the python interpreter.\n\n        There's an issue on Windows when running the executable from\n        a console_script causing the script name (sys.argv[0]) to\n        not end with .exe or .py and thus cannot be run via popen.\n        \"\"\"\n        if sys.platform == 'win32':\n            if not name.endswith('.exe') and not name.endswith('.py'):\n                name += '.exe'\n        return name\n\n    def daemonize(self): # pragma: no cover\n        pid = live_pidfile(self.options.pid_file)\n        if pid:\n            raise DaemonizeException(\n                \"Daemon is already running (PID: %s from PID file %s)\"\n                % (pid, self.options.pid_file))\n\n        if self.options.verbose > 0:\n            self.out('Entering daemon mode')\n        pid = os.fork()\n        if pid:\n            # The forked process also has a handle on resources, so we\n            # *don't* want proper termination of the process, we just\n            # want to exit quick (which os._exit() does)\n            os._exit(0)\n        # Make this the session leader\n        os.setsid()\n        # Fork again for good measure!\n        pid = os.fork()\n        if pid:\n            os._exit(0)\n\n        # @@: Should we set the umask and cwd now?\n\n        import resource  # Resource usage information.\n        maxfd = resource.getrlimit(resource.RLIMIT_NOFILE)[1]\n        if (maxfd == resource.RLIM_INFINITY):\n            maxfd = MAXFD\n        # Iterate through and close all file descriptors.\n        for fd in range(0, maxfd):\n            try:\n                os.close(fd)\n            except OSError:  # ERROR, fd wasn't open to begin with (ignored)\n                pass\n\n        if (hasattr(os, \"devnull\")):\n            REDIRECT_TO = os.devnull\n        else:\n            REDIRECT_TO = \"/dev/null\"\n        os.open(REDIRECT_TO, os.O_RDWR)  # standard input (0)\n        # Duplicate standard input to standard output and standard error.\n        os.dup2(0, 1)  # standard output (1)\n        os.dup2(0, 2)  # standard error (2)\n\n    def _remove_pid_file(self, written_pid, filename, verbosity):\n        current_pid = os.getpid()\n        if written_pid != current_pid:\n            # A forked process must be exiting, not the process that\n            # wrote the PID file\n            return\n        if not os.path.exists(filename):\n            return\n        with open(filename) as f:\n            content = f.read().strip()\n        try:\n            pid_in_file = int(content)\n        except ValueError:\n            pass\n        else:\n            if pid_in_file != current_pid:\n                msg = \"PID file %s contains %s, not expected PID %s\"\n                self.out(msg % (filename, pid_in_file, current_pid))\n                return\n        if verbosity > 0:\n            self.out(\"Removing PID file %s\" % filename)\n        try:\n            os.unlink(filename)\n            return\n        except OSError as e:\n            # Record, but don't give traceback\n            self.out(\"Cannot remove PID file: (%s)\" % e)\n        # well, at least lets not leave the invalid PID around...\n        try:\n            with open(filename, 'w') as f:\n                f.write('')\n        except OSError as e:\n            self.out('Stale PID left in file: %s (%s)' % (filename, e))\n        else:\n            self.out('Stale PID removed')\n\n    def record_pid(self, pid_file):\n        pid = os.getpid()\n        if self.options.verbose > 1:\n            self.out('Writing PID %s to %s' % (pid, pid_file))\n        with open(pid_file, 'w') as f:\n            f.write(str(pid))\n        atexit.register(self._remove_pid_file, pid, pid_file, self.options.verbose)\n\n    def stop_daemon(self): # pragma: no cover\n        pid_file = self.options.pid_file or 'pyramid.pid'\n        if not os.path.exists(pid_file):\n            self.out('No PID file exists in %s' % pid_file)\n            return 1\n        pid = read_pidfile(pid_file)\n        if not pid:\n            self.out(\"Not a valid PID file in %s\" % pid_file)\n            return 1\n        pid = live_pidfile(pid_file)\n        if not pid:\n            self.out(\"PID in %s is not valid (deleting)\" % pid_file)\n            try:\n                os.unlink(pid_file)\n            except (OSError, IOError) as e:\n                self.out(\"Could not delete: %s\" % e)\n                return 2\n            return 1\n        for j in range(10):\n            if not live_pidfile(pid_file):\n                break\n            import signal\n            kill(pid, signal.SIGTERM)\n            time.sleep(1)\n        else:\n            self.out(\"failed to kill web process %s\" % pid)\n            return 3\n        if os.path.exists(pid_file):\n            os.unlink(pid_file)\n        return 0\n\n    def show_status(self): # pragma: no cover\n        pid_file = self.options.pid_file or 'pyramid.pid'\n        if not os.path.exists(pid_file):\n            self.out('No PID file %s' % pid_file)\n            return 1\n        pid = read_pidfile(pid_file)\n        if not pid:\n            self.out('No PID in file %s' % pid_file)\n            return 1\n        pid = live_pidfile(pid_file)\n        if not pid:\n            self.out('PID %s in %s is not running' % (pid, pid_file))\n            return 1\n        self.out('Server running in PID %s' % pid)\n        return 0\n\n    def restart_with_reloader(self): # pragma: no cover\n        self.restart_with_monitor(reloader=True)\n\n    def restart_with_monitor(self, reloader=False): # pragma: no cover\n        if self.options.verbose > 0:\n            if reloader:\n                self.out('Starting subprocess with file monitor')\n            else:\n                self.out('Starting subprocess with monitor parent')\n        while 1:\n            args = [\n                self.quote_first_command_arg(sys.executable),\n                self.find_script_path(sys.argv[0]),\n            ] + sys.argv[1:]\n            new_environ = os.environ.copy()\n            if reloader:\n                new_environ[self._reloader_environ_key] = 'true'\n            else:\n                new_environ[self._monitor_environ_key] = 'true'\n            proc = None\n            try:\n                try:\n                    _turn_sigterm_into_systemexit()\n                    proc = subprocess.Popen(args, env=new_environ)\n                    exit_code = proc.wait()\n                    proc = None\n                except KeyboardInterrupt:\n                    self.out('^C caught in monitor process')\n                    if self.options.verbose > 1:\n                        raise\n                    return 1\n            finally:\n                if proc is not None:\n                    import signal\n                    try:\n                        kill(proc.pid, signal.SIGTERM)\n                    except (OSError, IOError):\n                        pass\n\n            if reloader:\n                # Reloader always exits with code 3; but if we are\n                # a monitor, any exit code will restart\n                if exit_code != 3:\n                    return exit_code\n            if self.options.verbose > 0:\n                self.out('%s %s %s' % ('-' * 20, 'Restarting', '-' * 20))\n\n    def change_user_group(self, user, group): # pragma: no cover\n        import pwd\n        import grp\n\n        self.out('''\\\nThe --user and --group options have been deprecated in Pyramid 1.6. They will\nbe removed in a future release per Pyramid's deprecation policy. Please\nconsider using a real process manager for your processes like Systemd, Circus,\nor Supervisor, all of which support process security.\n''')\n\n        uid = gid = None\n        if group:\n            try:\n                gid = int(group)\n                group = grp.getgrgid(gid).gr_name\n            except ValueError:\n                import grp\n                try:\n                    entry = grp.getgrnam(group)\n                except KeyError:\n                    raise ValueError(\n                        \"Bad group: %r; no such group exists\" % group)\n                gid = entry.gr_gid\n        try:\n            uid = int(user)\n            user = pwd.getpwuid(uid).pw_name\n        except ValueError:\n            try:\n                entry = pwd.getpwnam(user)\n            except KeyError:\n                raise ValueError(\n                    \"Bad username: %r; no such user exists\" % user)\n            if not gid:\n                gid = entry.pw_gid\n            uid = entry.pw_uid\n        if self.options.verbose > 0:\n            self.out('Changing user to %s:%s (%s:%s)' % (\n                user, group or '(unknown)', uid, gid))\n        if gid:\n            os.setgid(gid)\n        if uid:\n            os.setuid(uid)\n\n    def _warn_daemon_deprecated(self):\n        self.out('''\\\nThe daemon options have been deprecated in Pyramid 1.6. They will be removed\nin a future release per Pyramid's deprecation policy. Please consider using\na real process manager for your processes like Systemd, Circus, or Supervisor.\n\nThe following commands are deprecated:\n    [start,stop,restart,status] --daemon, --stop-server, --status, --pid-file, --log-file\n''')\n\nclass LazyWriter(object):\n\n    \"\"\"\n    File-like object that opens a file lazily when it is first written\n    to.\n    \"\"\"\n\n    def __init__(self, filename, mode='w'):\n        self.filename = filename\n        self.fileobj = None\n        self.lock = threading.Lock()\n        self.mode = mode\n\n    def open(self):\n        if self.fileobj is None:\n            with self.lock:\n                self.fileobj = open(self.filename, self.mode)\n        return self.fileobj\n\n    def close(self):\n        fileobj = self.fileobj\n        if fileobj is not None:\n            fileobj.close()\n\n    def __del__(self):\n        self.close()\n\n    def write(self, text):\n        fileobj = self.open()\n        fileobj.write(text)\n        fileobj.flush()\n\n    def writelines(self, text):\n        fileobj = self.open()\n        fileobj.writelines(text)\n        fileobj.flush()\n\n    def flush(self):\n        self.open().flush()\n\ndef live_pidfile(pidfile): # pragma: no cover\n    \"\"\"(pidfile:str) -> int | None\n    Returns an int found in the named file, if there is one,\n    and if there is a running process with that process id.\n    Return None if no such process exists.\n    \"\"\"\n    pid = read_pidfile(pidfile)\n    if pid:\n        try:\n            kill(int(pid), 0)\n            return pid\n        except OSError as e:\n            if e.errno == errno.EPERM:\n                return pid\n    return None\n\ndef read_pidfile(filename):\n    if os.path.exists(filename):\n        try:\n            with open(filename) as f:\n                content = f.read()\n            return int(content.strip())\n        except (ValueError, IOError):\n            return None\n    else:\n        return None\n\ndef ensure_port_cleanup(\n    bound_addresses, maxtries=30, sleeptime=2): # pragma: no cover\n    \"\"\"\n    This makes sure any open ports are closed.\n\n    Does this by connecting to them until they give connection\n    refused.  Servers should call like::\n\n        ensure_port_cleanup([80, 443])\n    \"\"\"\n    atexit.register(_cleanup_ports, bound_addresses, maxtries=maxtries,\n                    sleeptime=sleeptime)\n\ndef _cleanup_ports(\n    bound_addresses, maxtries=30, sleeptime=2): # pragma: no cover\n    # Wait for the server to bind to the port.\n    import socket\n    import errno\n    for bound_address in bound_addresses:\n        for attempt in range(maxtries):\n            sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\n            try:\n                sock.connect(bound_address)\n            except socket.error as e:\n                if e.args[0] != errno.ECONNREFUSED:\n                    raise\n                break\n            else:\n                time.sleep(sleeptime)\n        else:\n            raise SystemExit('Timeout waiting for port.')\n        sock.close()\n\ndef _turn_sigterm_into_systemexit(): # pragma: no cover\n    \"\"\"\n    Attempts to turn a SIGTERM exception into a SystemExit exception.\n    \"\"\"\n    try:\n        import signal\n    except ImportError:\n        return\n    def handle_term(signo, frame):\n        raise SystemExit\n    signal.signal(signal.SIGTERM, handle_term)\n\ndef ensure_echo_on(): # pragma: no cover\n    if termios:\n        fd = sys.stdin\n        if fd.isatty():\n            attr_list = termios.tcgetattr(fd)\n            if not attr_list[3] & termios.ECHO:\n                attr_list[3] |= termios.ECHO\n                termios.tcsetattr(fd, termios.TCSANOW, attr_list)\n\ndef install_reloader(poll_interval=1, extra_files=None): # pragma: no cover\n    \"\"\"\n    Install the reloading monitor.\n\n    On some platforms server threads may not terminate when the main\n    thread does, causing ports to remain open/locked.\n    \"\"\"\n    ensure_echo_on()\n    mon = Monitor(poll_interval=poll_interval)\n    if extra_files is None:\n        extra_files = []\n    mon.extra_files.extend(extra_files)\n    t = threading.Thread(target=mon.periodic_reload)\n    t.setDaemon(True)\n    t.start()\n\nclass classinstancemethod(object):\n    \"\"\"\n    Acts like a class method when called from a class, like an\n    instance method when called by an instance.  The method should\n    take two arguments, 'self' and 'cls'; one of these will be None\n    depending on how the method was called.\n    \"\"\"\n\n    def __init__(self, func):\n        self.func = func\n        self.__doc__ = func.__doc__\n\n    def __get__(self, obj, type=None):\n        return _methodwrapper(self.func, obj=obj, type=type)\n\nclass _methodwrapper(object):\n\n    def __init__(self, func, obj, type):\n        self.func = func\n        self.obj = obj\n        self.type = type\n\n    def __call__(self, *args, **kw):\n        assert 'self' not in kw and 'cls' not in kw, (\n            \"You cannot use 'self' or 'cls' arguments to a \"\n            \"classinstancemethod\")\n        return self.func(*((self.obj, self.type) + args), **kw)\n\n\nclass Monitor(object): # pragma: no cover\n    \"\"\"\n    A file monitor and server restarter.\n\n    Use this like:\n\n    ..code-block:: Python\n\n        install_reloader()\n\n    Then make sure your server is installed with a shell script like::\n\n        err=3\n        while test \"$err\" -eq 3 ; do\n            python server.py\n            err=\"$?\"\n        done\n\n    or is run from this .bat file (if you use Windows)::\n\n        @echo off\n        :repeat\n            python server.py\n        if %errorlevel% == 3 goto repeat\n\n    or run a monitoring process in Python (``pserve --reload`` does\n    this).\n\n    Use the ``watch_file(filename)`` function to cause a reload/restart for\n    other non-Python files (e.g., configuration files).  If you have\n    a dynamic set of files that grows over time you can use something like::\n\n        def watch_config_files():\n            return CONFIG_FILE_CACHE.keys()\n        add_file_callback(watch_config_files)\n\n    Then every time the reloader polls files it will call\n    ``watch_config_files`` and check all the filenames it returns.\n    \"\"\"\n    instances = []\n    global_extra_files = []\n    global_file_callbacks = []\n\n    def __init__(self, poll_interval):\n        self.module_mtimes = {}\n        self.keep_running = True\n        self.poll_interval = poll_interval\n        self.extra_files = list(self.global_extra_files)\n        self.instances.append(self)\n        self.syntax_error_files = set()\n        self.pending_reload = False\n        self.file_callbacks = list(self.global_file_callbacks)\n        temp_pyc_fp = tempfile.NamedTemporaryFile(delete=False)\n        self.temp_pyc = temp_pyc_fp.name\n        temp_pyc_fp.close()\n\n    def _exit(self):\n        try:\n            os.unlink(self.temp_pyc)\n        except IOError:\n            # not worried if the tempfile can't be removed\n            pass\n        # use os._exit() here and not sys.exit() since within a\n        # thread sys.exit() just closes the given thread and\n        # won't kill the process; note os._exit does not call\n        # any atexit callbacks, nor does it do finally blocks,\n        # flush open files, etc.  In otherwords, it is rude.\n        os._exit(3)\n\n    def periodic_reload(self):\n        while True:\n            if not self.check_reload():\n                self._exit()\n                break\n            time.sleep(self.poll_interval)\n\n    def check_reload(self):\n        filenames = list(self.extra_files)\n        for file_callback in self.file_callbacks:\n            try:\n                filenames.extend(file_callback())\n            except:\n                print(\n                    \"Error calling reloader callback %r:\" % file_callback)\n                traceback.print_exc()\n        for module in list(sys.modules.values()):\n            try:\n                filename = module.__file__\n            except (AttributeError, ImportError):\n                continue\n            if filename is not None:\n                filenames.append(filename)\n        new_changes = False\n        for filename in filenames:\n            try:\n                stat = os.stat(filename)\n                if stat:\n                    mtime = stat.st_mtime\n                else:\n                    mtime = 0\n            except (OSError, IOError):\n                continue\n            if filename.endswith('.pyc') and os.path.exists(filename[:-1]):\n                mtime = max(os.stat(filename[:-1]).st_mtime, mtime)\n                pyc = True\n            else:\n                pyc = False\n            old_mtime = self.module_mtimes.get(filename)\n            self.module_mtimes[filename] = mtime\n            if old_mtime is not None and old_mtime < mtime:\n                new_changes = True\n                if pyc:\n                    filename = filename[:-1]\n                is_valid = True\n                if filename.endswith('.py'):\n                    is_valid = self.check_syntax(filename)\n                if is_valid:\n                    print(\"%s changed ...\" % filename)\n        if new_changes:\n            self.pending_reload = True\n            if self.syntax_error_files:\n                for filename in sorted(self.syntax_error_files):\n                    print(\"%s has a SyntaxError; NOT reloading.\" % filename)\n        if self.pending_reload and not self.syntax_error_files:\n            self.pending_reload = False\n            return False\n        return True\n\n    def check_syntax(self, filename):\n        # check if a file has syntax errors.\n        # If so, track it until it's fixed.\n        try:\n            py_compile.compile(filename, cfile=self.temp_pyc, doraise=True)\n        except py_compile.PyCompileError as ex:\n            print(ex.msg)\n            self.syntax_error_files.add(filename)\n            return False\n        else:\n            if filename in self.syntax_error_files:\n                self.syntax_error_files.remove(filename)\n        return True\n\n    def watch_file(self, cls, filename):\n        \"\"\"Watch the named file for changes\"\"\"\n        filename = os.path.abspath(filename)\n        if self is None:\n            for instance in cls.instances:\n                instance.watch_file(filename)\n            cls.global_extra_files.append(filename)\n        else:\n            self.extra_files.append(filename)\n\n    watch_file = classinstancemethod(watch_file)\n\n    def add_file_callback(self, cls, callback):\n        \"\"\"Add a callback -- a function that takes no parameters -- that will\n        return a list of filenames to watch for changes.\"\"\"\n        if self is None:\n            for instance in cls.instances:\n                instance.add_file_callback(callback)\n            cls.global_file_callbacks.append(callback)\n        else:\n            self.file_callbacks.append(callback)\n\n    add_file_callback = classinstancemethod(add_file_callback)\n\nwatch_file = Monitor.watch_file\nadd_file_callback = Monitor.add_file_callback\n\n# For paste.deploy server instantiation (egg:pyramid#wsgiref)\ndef wsgiref_server_runner(wsgi_app, global_conf, **kw): # pragma: no cover\n    from wsgiref.simple_server import make_server\n    host = kw.get('host', '0.0.0.0')\n    port = int(kw.get('port', 8080))\n    server = make_server(host, port, wsgi_app)\n    print('Starting HTTP server on http://%s:%s' % (host, port))\n    server.serve_forever()\n\n# For paste.deploy server instantiation (egg:pyramid#cherrypy)\ndef cherrypy_server_runner(\n        app, global_conf=None, host='127.0.0.1', port=None,\n        ssl_pem=None, protocol_version=None, numthreads=None,\n        server_name=None, max=None, request_queue_size=None,\n        timeout=None\n        ): # pragma: no cover\n    \"\"\"\n    Entry point for CherryPy's WSGI server\n\n    Serves the specified WSGI app via CherryPyWSGIServer.\n\n    ``app``\n\n        The WSGI 'application callable'; multiple WSGI applications\n        may be passed as (script_name, callable) pairs.\n\n    ``host``\n\n        This is the ipaddress to bind to (or a hostname if your\n        nameserver is properly configured).  This defaults to\n        127.0.0.1, which is not a public interface.\n\n    ``port``\n\n        The port to run on, defaults to 8080 for HTTP, or 4443 for\n        HTTPS. This can be a string or an integer value.\n\n    ``ssl_pem``\n\n        This an optional SSL certificate file (via OpenSSL) You can\n        generate a self-signed test PEM certificate file as follows:\n\n            $ openssl genrsa 1024 > host.key\n            $ chmod 400 host.key\n            $ openssl req -new -x509 -nodes -sha1 -days 365  \\\\\n                          -key host.key > host.cert\n            $ cat host.cert host.key > host.pem\n            $ chmod 400 host.pem\n\n    ``protocol_version``\n\n        The protocol used by the server, by default ``HTTP/1.1``.\n\n    ``numthreads``\n\n        The number of worker threads to create.\n\n    ``server_name``\n\n        The string to set for WSGI's SERVER_NAME environ entry.\n\n    ``max``\n\n        The maximum number of queued requests. (defaults to -1 = no\n        limit).\n\n    ``request_queue_size``\n\n        The 'backlog' argument to socket.listen(); specifies the\n        maximum number of queued connections.\n\n    ``timeout``\n\n        The timeout in seconds for accepted connections.\n    \"\"\"\n    is_ssl = False\n    if ssl_pem:\n        port = port or 4443\n        is_ssl = True\n\n    if not port:\n        if ':' in host:\n            host, port = host.split(':', 1)\n        else:\n            port = 8080\n    bind_addr = (host, int(port))\n\n    kwargs = {}\n    for var_name in ('numthreads', 'max', 'request_queue_size', 'timeout'):\n        var = locals()[var_name]\n        if var is not None:\n            kwargs[var_name] = int(var)\n\n    from cherrypy import wsgiserver\n\n    server = wsgiserver.CherryPyWSGIServer(bind_addr, app,\n                                           server_name=server_name, **kwargs)\n    if ssl_pem is not None:\n        if PY2:\n            server.ssl_certificate = server.ssl_private_key = ssl_pem\n        else:\n            # creates wsgiserver.ssl_builtin as side-effect\n            wsgiserver.get_ssl_adapter_class()\n            server.ssl_adapter = wsgiserver.ssl_builtin.BuiltinSSLAdapter(\n                ssl_pem, ssl_pem)\n\n    if protocol_version:\n        server.protocol = protocol_version\n\n    try:\n        protocol = is_ssl and 'https' or 'http'\n        if host == '0.0.0.0':\n            print('serving on 0.0.0.0:%s view at %s://127.0.0.1:%s' %\n                  (port, protocol, port))\n        else:\n            print('serving on %s://%s:%s' % (protocol, host, port))\n        server.start()\n    except (KeyboardInterrupt, SystemExit):\n        server.stop()\n\n    return server\n\nif __name__ == '__main__': # pragma: no cover\n    sys.exit(main() or 0)\n",
            "header": {
                "file": {
                    "path": "pyramid/scripts/pserve.py"
                },
                "misc_line": null
            },
            "index_line": {
                "old_commit_hash": "431afe6f4",
                "new_commit_hash": "74bda1dce",
                "mode": "100644"
            },
            "is_binary_file": false,
            "binary_line": null,
            "minus_file": {
                "path": "a/pyramid/scripts/pserve.py"
            },
            "plus_file": {
                "path": "b/pyramid/scripts/pserve.py"
            },
            "hunks": [
                {
                    "descriptor": {
                        "old_range": {
                            "start": 362,
                            "length": 7
                        },
                        "new_range": {
                            "start": 362,
                            "length": 7
                        },
                        "section": "a real process manager for your processes like Systemd, Circus, or Supervisor."
                    },
                    "line_group": {
                        "all_lines": [
                            {
                                "content": "            log_fn = None",
                                "type": "context"
                            },
                            {
                                "content": "        if log_fn:",
                                "type": "context"
                            },
                            {
                                "content": "            log_fn = os.path.join(base, log_fn)",
                                "type": "context"
                            },
                            {
                                "content": "            setup_logging(log_fn)",
                                "type": "deleted"
                            },
                            {
                                "content": "            setup_logging(log_fn, global_conf=vars)",
                                "type": "added"
                            },
                            {
                                "content": "",
                                "type": "context"
                            },
                            {
                                "content": "        server = self.loadserver(server_spec, name=server_name,",
                                "type": "context"
                            },
                            {
                                "content": "                                 relative_to=base, global_conf=vars)",
                                "type": "context"
                            }
                        ]
                    },
                    "modified_entities": [
                        {
                            "file_name": "pyramid/scripts/pserve.py",
                            "type": "class",
                            "name": "PServeCommand",
                            "content": "class PServeCommand(object):\n\n    usage = '%prog config_uri [start|stop|restart|status] [var=value]'\n    description = \"\"\"\\\n    This command serves a web application that uses a PasteDeploy\n    configuration file for the server and application.\n\n    If start/stop/restart is given, then --daemon is implied, and it will\n    start (normal operation), stop (--stop-daemon), or do both.\n    Note: Daemonization features are deprecated.\n\n    You can also include variable assignments like 'http_port=8080'\n    and then use %(http_port)s in your config files.\n    \"\"\"\n    default_verbosity = 1\n\n    parser = optparse.OptionParser(\n        usage,\n        description=textwrap.dedent(description)\n        )\n    parser.add_option(\n        '-n', '--app-name',\n        dest='app_name',\n        metavar='NAME',\n        help=\"Load the named application (default main)\")\n    parser.add_option(\n        '-s', '--server',\n        dest='server',\n        metavar='SERVER_TYPE',\n        help=\"Use the named server.\")\n    parser.add_option(\n        '--server-name',\n        dest='server_name',\n        metavar='SECTION_NAME',\n        help=(\"Use the named server as defined in the configuration file \"\n              \"(default: main)\"))\n    if hasattr(os, 'fork'):\n        parser.add_option(\n            '--daemon',\n            dest=\"daemon\",\n            action=\"store_true\",\n            help=\"Run in daemon (background) mode [DEPRECATED]\")\n    parser.add_option(\n        '--pid-file',\n        dest='pid_file',\n        metavar='FILENAME',\n        help=(\"Save PID to file (default to pyramid.pid if running in \"\n              \"daemon mode) [DEPRECATED]\"))\n    parser.add_option(\n        '--log-file',\n        dest='log_file',\n        metavar='LOG_FILE',\n        help=\"Save output to the given log file (redirects stdout) [DEPRECATED]\")\n    parser.add_option(\n        '--reload',\n        dest='reload',\n        action='store_true',\n        help=\"Use auto-restart file monitor\")\n    parser.add_option(\n        '--reload-interval',\n        dest='reload_interval',\n        default=1,\n        help=(\"Seconds between checking files (low number can cause \"\n              \"significant CPU usage)\"))\n    parser.add_option(\n        '--monitor-restart',\n        dest='monitor_restart',\n        action='store_true',\n        help=\"Auto-restart server if it dies [DEPRECATED]\")\n    parser.add_option(\n        '-b', '--browser',\n        dest='browser',\n        action='store_true',\n        help=\"Open a web browser to server url\")\n    parser.add_option(\n        '--status',\n        action='store_true',\n        dest='show_status',\n        help=(\"Show the status of the (presumably daemonized) server \"\n              \"[DEPRECATED]\"))\n    parser.add_option(\n        '-v', '--verbose',\n        default=default_verbosity,\n        dest='verbose',\n        action='count',\n        help=\"Set verbose level (default \" + str(default_verbosity) + \")\")\n    parser.add_option(\n        '-q', '--quiet',\n        action='store_const',\n        const=0,\n        dest='verbose',\n        help=\"Suppress verbose output\")\n\n    if hasattr(os, 'setuid'):\n        # I don't think these are available on Windows\n        parser.add_option(\n            '--user',\n            dest='set_user',\n            metavar=\"USERNAME\",\n            help=\"Set the user (usually only possible when run as root)\")\n        parser.add_option(\n            '--group',\n            dest='set_group',\n            metavar=\"GROUP\",\n            help=\"Set the group (usually only possible when run as root)\")\n\n    parser.add_option(\n        '--stop-daemon',\n        dest='stop_daemon',\n        action='store_true',\n        help=('Stop a daemonized server (given a PID file, or default '\n              'pyramid.pid file) [DEPRECATED]'))\n\n    _scheme_re = re.compile(r'^[a-z][a-z]+:', re.I)\n\n    _reloader_environ_key = 'PYTHON_RELOADER_SHOULD_RUN'\n    _monitor_environ_key = 'PASTE_MONITOR_SHOULD_RUN'\n\n    possible_subcommands = ('start', 'stop', 'restart', 'status')\n\n    def __init__(self, argv, quiet=False):\n        self.options, self.args = self.parser.parse_args(argv[1:])\n        if quiet:\n            self.options.verbose = 0\n\n    def out(self, msg): # pragma: no cover\n        if self.options.verbose > 0:\n            print(msg)\n\n    def get_options(self):\n        if (\n                len(self.args) > 1 and\n                self.args[1] in self.possible_subcommands\n        ):\n            restvars = self.args[2:]\n        else:\n            restvars = self.args[1:]\n\n        return parse_vars(restvars)\n\n    def run(self):  # pragma: no cover\n        if self.options.stop_daemon:\n            self._warn_daemon_deprecated()\n            return self.stop_daemon()\n\n        if not hasattr(self.options, 'set_user'):\n            # Windows case:\n            self.options.set_user = self.options.set_group = None\n\n        # @@: Is this the right stage to set the user at?\n        if self.options.set_user or self.options.set_group:\n            self.change_user_group(\n                self.options.set_user, self.options.set_group)\n\n        if not self.args:\n            self.out('You must give a config file')\n            return 2\n        app_spec = self.args[0]\n\n        if (\n                len(self.args) > 1 and\n                self.args[1] in self.possible_subcommands\n        ):\n            cmd = self.args[1]\n        else:\n            cmd = None\n\n        if self.options.reload:\n            if (\n                getattr(self.options, 'daemon', False) or\n                cmd in ('start', 'stop', 'restart')\n            ):\n                self.out(\n                    'Error: Cannot use reloading while running as a dameon.')\n                return 2\n            if os.environ.get(self._reloader_environ_key):\n                if self.options.verbose > 1:\n                    self.out('Running reloading file monitor')\n                install_reloader(int(self.options.reload_interval), [app_spec])\n                # if self.requires_config_file:\n                #     watch_file(self.args[0])\n            else:\n                return self.restart_with_reloader()\n\n        if cmd not in (None, 'start', 'stop', 'restart', 'status'):\n            self.out(\n                'Error: must give start|stop|restart (not %s)' % cmd)\n            return 2\n\n        if cmd == 'status' or self.options.show_status:\n            self._warn_daemon_deprecated()\n            return self.show_status()\n\n        if cmd in ('restart', 'stop'):\n            self._warn_daemon_deprecated()\n            result = self.stop_daemon()\n            if result:\n                if cmd == 'restart':\n                    self.out(\"Could not stop daemon; aborting\")\n                else:\n                    self.out(\"Could not stop daemon\")\n                return result\n            if cmd == 'stop':\n                return result\n            self.options.daemon = True\n\n        if cmd == 'start':\n            self.options.daemon = True\n\n        app_name = self.options.app_name\n\n        vars = self.get_options()\n\n        if not self._scheme_re.search(app_spec):\n            app_spec = 'config:' + app_spec\n        server_name = self.options.server_name\n        if self.options.server:\n            server_spec = 'egg:pyramid'\n            assert server_name is None\n            server_name = self.options.server\n        else:\n            server_spec = app_spec\n        base = os.getcwd()\n\n        # warn before setting a default\n        if self.options.pid_file or self.options.log_file:\n            self._warn_daemon_deprecated()\n\n        if getattr(self.options, 'daemon', False):\n            if not self.options.pid_file:\n                self.options.pid_file = 'pyramid.pid'\n            if not self.options.log_file:\n                self.options.log_file = 'pyramid.log'\n\n        # Ensure the log file is writeable\n        if self.options.log_file:\n            try:\n                writeable_log_file = open(self.options.log_file, 'a')\n            except IOError as ioe:\n                msg = 'Error: Unable to write to log file: %s' % ioe\n                raise ValueError(msg)\n            writeable_log_file.close()\n\n        # Ensure the pid file is writeable\n        if self.options.pid_file:\n            try:\n                writeable_pid_file = open(self.options.pid_file, 'a')\n            except IOError as ioe:\n                msg = 'Error: Unable to write to pid file: %s' % ioe\n                raise ValueError(msg)\n            writeable_pid_file.close()\n\n        # warn before forking\n        if (\n                self.options.monitor_restart and\n                not os.environ.get(self._monitor_environ_key)\n        ):\n            self.out('''\\\n--monitor-restart has been deprecated in Pyramid 1.6. It will be removed\nin a future release per Pyramid's deprecation policy. Please consider using\na real process manager for your processes like Systemd, Circus, or Supervisor.\n''')\n\n        if (\n            getattr(self.options, 'daemon', False) and\n            not os.environ.get(self._monitor_environ_key)\n        ):\n            self._warn_daemon_deprecated()\n            try:\n                self.daemonize()\n            except DaemonizeException as ex:\n                if self.options.verbose > 0:\n                    self.out(str(ex))\n                return 2\n\n        if (\n            not os.environ.get(self._monitor_environ_key) and\n            self.options.pid_file\n        ):\n            self.record_pid(self.options.pid_file)\n\n        if (\n                self.options.monitor_restart and\n                not os.environ.get(self._monitor_environ_key)\n        ):\n            return self.restart_with_monitor()\n\n        if self.options.log_file:\n            stdout_log = LazyWriter(self.options.log_file, 'a')\n            sys.stdout = stdout_log\n            sys.stderr = stdout_log\n            logging.basicConfig(stream=stdout_log)\n\n        log_fn = app_spec\n        if log_fn.startswith('config:'):\n            log_fn = app_spec[len('config:'):]\n        elif log_fn.startswith('egg:'):\n            log_fn = None\n        if log_fn:\n            log_fn = os.path.join(base, log_fn)\n            setup_logging(log_fn)\n\n        server = self.loadserver(server_spec, name=server_name,\n                                 relative_to=base, global_conf=vars)\n\n        app = self.loadapp(app_spec, name=app_name, relative_to=base,\n                global_conf=vars)\n\n        if self.options.verbose > 0:\n            if hasattr(os, 'getpid'):\n                msg = 'Starting server in PID %i.' % os.getpid()\n            else:\n                msg = 'Starting server.'\n            self.out(msg)\n\n        def serve():\n            try:\n                server(app)\n            except (SystemExit, KeyboardInterrupt) as e:\n                if self.options.verbose > 1:\n                    raise\n                if str(e):\n                    msg = ' ' + str(e)\n                else:\n                    msg = ''\n                self.out('Exiting%s (-v to see traceback)' % msg)\n\n        if self.options.browser:\n            def open_browser():\n                context = loadcontext(SERVER, app_spec, name=server_name, relative_to=base,\n                        global_conf=vars)\n                url = 'http://127.0.0.1:{port}/'.format(**context.config())\n                time.sleep(1)\n                webbrowser.open(url)\n            t = threading.Thread(target=open_browser)\n            t.setDaemon(True)\n            t.start()\n\n        serve()\n\n    def loadapp(self, app_spec, name, relative_to, **kw): # pragma: no cover\n        return loadapp(app_spec, name=name, relative_to=relative_to, **kw)\n\n    def loadserver(self, server_spec, name, relative_to, **kw):# pragma:no cover\n        return loadserver(\n            server_spec, name=name, relative_to=relative_to, **kw)\n\n    def quote_first_command_arg(self, arg): # pragma: no cover\n        \"\"\"\n        There's a bug in Windows when running an executable that's\n        located inside a path with a space in it.  This method handles\n        that case, or on non-Windows systems or an executable with no\n        spaces, it just leaves well enough alone.\n        \"\"\"\n        if (sys.platform != 'win32' or ' ' not in arg):\n            # Problem does not apply:\n            return arg\n        try:\n            import win32api\n        except ImportError:\n            raise ValueError(\n                \"The executable %r contains a space, and in order to \"\n                \"handle this issue you must have the win32api module \"\n                \"installed\" % arg)\n        arg = win32api.GetShortPathName(arg)\n        return arg\n\n    def find_script_path(self, name): # pragma: no cover\n        \"\"\"\n        Return the path to the script being invoked by the python interpreter.\n\n        There's an issue on Windows when running the executable from\n        a console_script causing the script name (sys.argv[0]) to\n        not end with .exe or .py and thus cannot be run via popen.\n        \"\"\"\n        if sys.platform == 'win32':\n            if not name.endswith('.exe') and not name.endswith('.py'):\n                name += '.exe'\n        return name\n\n    def daemonize(self): # pragma: no cover\n        pid = live_pidfile(self.options.pid_file)\n        if pid:\n            raise DaemonizeException(\n                \"Daemon is already running (PID: %s from PID file %s)\"\n                % (pid, self.options.pid_file))\n\n        if self.options.verbose > 0:\n            self.out('Entering daemon mode')\n        pid = os.fork()\n        if pid:\n            # The forked process also has a handle on resources, so we\n            # *don't* want proper termination of the process, we just\n            # want to exit quick (which os._exit() does)\n            os._exit(0)\n        # Make this the session leader\n        os.setsid()\n        # Fork again for good measure!\n        pid = os.fork()\n        if pid:\n            os._exit(0)\n\n        # @@: Should we set the umask and cwd now?\n\n        import resource  # Resource usage information.\n        maxfd = resource.getrlimit(resource.RLIMIT_NOFILE)[1]\n        if (maxfd == resource.RLIM_INFINITY):\n            maxfd = MAXFD\n        # Iterate through and close all file descriptors.\n        for fd in range(0, maxfd):\n            try:\n                os.close(fd)\n            except OSError:  # ERROR, fd wasn't open to begin with (ignored)\n                pass\n\n        if (hasattr(os, \"devnull\")):\n            REDIRECT_TO = os.devnull\n        else:\n            REDIRECT_TO = \"/dev/null\"\n        os.open(REDIRECT_TO, os.O_RDWR)  # standard input (0)\n        # Duplicate standard input to standard output and standard error.\n        os.dup2(0, 1)  # standard output (1)\n        os.dup2(0, 2)  # standard error (2)\n\n    def _remove_pid_file(self, written_pid, filename, verbosity):\n        current_pid = os.getpid()\n        if written_pid != current_pid:\n            # A forked process must be exiting, not the process that\n            # wrote the PID file\n            return\n        if not os.path.exists(filename):\n            return\n        with open(filename) as f:\n            content = f.read().strip()\n        try:\n            pid_in_file = int(content)\n        except ValueError:\n            pass\n        else:\n            if pid_in_file != current_pid:\n                msg = \"PID file %s contains %s, not expected PID %s\"\n                self.out(msg % (filename, pid_in_file, current_pid))\n                return\n        if verbosity > 0:\n            self.out(\"Removing PID file %s\" % filename)\n        try:\n            os.unlink(filename)\n            return\n        except OSError as e:\n            # Record, but don't give traceback\n            self.out(\"Cannot remove PID file: (%s)\" % e)\n        # well, at least lets not leave the invalid PID around...\n        try:\n            with open(filename, 'w') as f:\n                f.write('')\n        except OSError as e:\n            self.out('Stale PID left in file: %s (%s)' % (filename, e))\n        else:\n            self.out('Stale PID removed')\n\n    def record_pid(self, pid_file):\n        pid = os.getpid()\n        if self.options.verbose > 1:\n            self.out('Writing PID %s to %s' % (pid, pid_file))\n        with open(pid_file, 'w') as f:\n            f.write(str(pid))\n        atexit.register(self._remove_pid_file, pid, pid_file, self.options.verbose)\n\n    def stop_daemon(self): # pragma: no cover\n        pid_file = self.options.pid_file or 'pyramid.pid'\n        if not os.path.exists(pid_file):\n            self.out('No PID file exists in %s' % pid_file)\n            return 1\n        pid = read_pidfile(pid_file)\n        if not pid:\n            self.out(\"Not a valid PID file in %s\" % pid_file)\n            return 1\n        pid = live_pidfile(pid_file)\n        if not pid:\n            self.out(\"PID in %s is not valid (deleting)\" % pid_file)\n            try:\n                os.unlink(pid_file)\n            except (OSError, IOError) as e:\n                self.out(\"Could not delete: %s\" % e)\n                return 2\n            return 1\n        for j in range(10):\n            if not live_pidfile(pid_file):\n                break\n            import signal\n            kill(pid, signal.SIGTERM)\n            time.sleep(1)\n        else:\n            self.out(\"failed to kill web process %s\" % pid)\n            return 3\n        if os.path.exists(pid_file):\n            os.unlink(pid_file)\n        return 0\n\n    def show_status(self): # pragma: no cover\n        pid_file = self.options.pid_file or 'pyramid.pid'\n        if not os.path.exists(pid_file):\n            self.out('No PID file %s' % pid_file)\n            return 1\n        pid = read_pidfile(pid_file)\n        if not pid:\n            self.out('No PID in file %s' % pid_file)\n            return 1\n        pid = live_pidfile(pid_file)\n        if not pid:\n            self.out('PID %s in %s is not running' % (pid, pid_file))\n            return 1\n        self.out('Server running in PID %s' % pid)\n        return 0\n\n    def restart_with_reloader(self): # pragma: no cover\n        self.restart_with_monitor(reloader=True)\n\n    def restart_with_monitor(self, reloader=False): # pragma: no cover\n        if self.options.verbose > 0:\n            if reloader:\n                self.out('Starting subprocess with file monitor')\n            else:\n                self.out('Starting subprocess with monitor parent')\n        while 1:\n            args = [\n                self.quote_first_command_arg(sys.executable),\n                self.find_script_path(sys.argv[0]),\n            ] + sys.argv[1:]\n            new_environ = os.environ.copy()\n            if reloader:\n                new_environ[self._reloader_environ_key] = 'true'\n            else:\n                new_environ[self._monitor_environ_key] = 'true'\n            proc = None\n            try:\n                try:\n                    _turn_sigterm_into_systemexit()\n                    proc = subprocess.Popen(args, env=new_environ)\n                    exit_code = proc.wait()\n                    proc = None\n                except KeyboardInterrupt:\n                    self.out('^C caught in monitor process')\n                    if self.options.verbose > 1:\n                        raise\n                    return 1\n            finally:\n                if proc is not None:\n                    import signal\n                    try:\n                        kill(proc.pid, signal.SIGTERM)\n                    except (OSError, IOError):\n                        pass\n\n            if reloader:\n                # Reloader always exits with code 3; but if we are\n                # a monitor, any exit code will restart\n                if exit_code != 3:\n                    return exit_code\n            if self.options.verbose > 0:\n                self.out('%s %s %s' % ('-' * 20, 'Restarting', '-' * 20))\n\n    def change_user_group(self, user, group): # pragma: no cover\n        import pwd\n        import grp\n\n        self.out('''\\\nThe --user and --group options have been deprecated in Pyramid 1.6. They will\nbe removed in a future release per Pyramid's deprecation policy. Please\nconsider using a real process manager for your processes like Systemd, Circus,\nor Supervisor, all of which support process security.\n''')\n\n        uid = gid = None\n        if group:\n            try:\n                gid = int(group)\n                group = grp.getgrgid(gid).gr_name\n            except ValueError:\n                import grp\n                try:\n                    entry = grp.getgrnam(group)\n                except KeyError:\n                    raise ValueError(\n                        \"Bad group: %r; no such group exists\" % group)\n                gid = entry.gr_gid\n        try:\n            uid = int(user)\n            user = pwd.getpwuid(uid).pw_name\n        except ValueError:\n            try:\n                entry = pwd.getpwnam(user)\n            except KeyError:\n                raise ValueError(\n                    \"Bad username: %r; no such user exists\" % user)\n            if not gid:\n                gid = entry.pw_gid\n            uid = entry.pw_uid\n        if self.options.verbose > 0:\n            self.out('Changing user to %s:%s (%s:%s)' % (\n                user, group or '(unknown)', uid, gid))\n        if gid:\n            os.setgid(gid)\n        if uid:\n            os.setuid(uid)\n\n    def _warn_daemon_deprecated(self):\n        self.out('''\\\nThe daemon options have been deprecated in Pyramid 1.6. They will be removed\nin a future release per Pyramid's deprecation policy. Please consider using\na real process manager for your processes like Systemd, Circus, or Supervisor.\n\nThe following commands are deprecated:\n    [start,stop,restart,status] --daemon, --stop-server, --status, --pid-file, --log-file\n''')",
                            "ast_type_str": "ClassDef",
                            "start_lineno": 65,
                            "end_lineno": 679,
                            "parent": null
                        },
                        {
                            "file_name": "pyramid/scripts/pserve.py",
                            "type": "method",
                            "name": "PServeCommand.run",
                            "content": "class PServeCommand(object):\n\n    usage = '%prog config_uri [start|stop|restart|status] [var=value]'\n    description = \"\"\"\\\n    This command serves a web application that uses a PasteDeploy\n    configuration file for the server and application.\n\n    If start/stop/restart is given, then --daemon is implied, and it will\n    start (normal operation), stop (--stop-daemon), or do both.\n    Note: Daemonization features are deprecated.\n\n    You can also include variable assignments like 'http_port=8080'\n    and then use %(http_port)s in your config files.\n    \"\"\"\n    default_verbosity = 1\n\n    parser = optparse.OptionParser(\n        usage,\n        description=textwrap.dedent(description)\n        )\n    parser.add_option(\n        '-n', '--app-name',\n        dest='app_name',\n        metavar='NAME',\n        help=\"Load the named application (default main)\")\n    parser.add_option(\n        '-s', '--server',\n        dest='server',\n        metavar='SERVER_TYPE',\n        help=\"Use the named server.\")\n    parser.add_option(\n        '--server-name',\n        dest='server_name',\n        metavar='SECTION_NAME',\n        help=(\"Use the named server as defined in the configuration file \"\n              \"(default: main)\"))\n    if hasattr(os, 'fork'):\n        parser.add_option(\n            '--daemon',\n            dest=\"daemon\",\n            action=\"store_true\",\n            help=\"Run in daemon (background) mode [DEPRECATED]\")\n    parser.add_option(\n        '--pid-file',\n        dest='pid_file',\n        metavar='FILENAME',\n        help=(\"Save PID to file (default to pyramid.pid if running in \"\n              \"daemon mode) [DEPRECATED]\"))\n    parser.add_option(\n        '--log-file',\n        dest='log_file',\n        metavar='LOG_FILE',\n        help=\"Save output to the given log file (redirects stdout) [DEPRECATED]\")\n    parser.add_option(\n        '--reload',\n        dest='reload',\n        action='store_true',\n        help=\"Use auto-restart file monitor\")\n    parser.add_option(\n        '--reload-interval',\n        dest='reload_interval',\n        default=1,\n        help=(\"Seconds between checking files (low number can cause \"\n              \"significant CPU usage)\"))\n    parser.add_option(\n        '--monitor-restart',\n        dest='monitor_restart',\n        action='store_true',\n        help=\"Auto-restart server if it dies [DEPRECATED]\")\n    parser.add_option(\n        '-b', '--browser',\n        dest='browser',\n        action='store_true',\n        help=\"Open a web browser to server url\")\n    parser.add_option(\n        '--status',\n        action='store_true',\n        dest='show_status',\n        help=(\"Show the status of the (presumably daemonized) server \"\n              \"[DEPRECATED]\"))\n    parser.add_option(\n        '-v', '--verbose',\n        default=default_verbosity,\n        dest='verbose',\n        action='count',\n        help=\"Set verbose level (default \" + str(default_verbosity) + \")\")\n    parser.add_option(\n        '-q', '--quiet',\n        action='store_const',\n        const=0,\n        dest='verbose',\n        help=\"Suppress verbose output\")\n\n    if hasattr(os, 'setuid'):\n        # I don't think these are available on Windows\n        parser.add_option(\n            '--user',\n            dest='set_user',\n            metavar=\"USERNAME\",\n            help=\"Set the user (usually only possible when run as root)\")\n        parser.add_option(\n            '--group',\n            dest='set_group',\n            metavar=\"GROUP\",\n            help=\"Set the group (usually only possible when run as root)\")\n\n    parser.add_option(\n        '--stop-daemon',\n        dest='stop_daemon',\n        action='store_true',\n        help=('Stop a daemonized server (given a PID file, or default '\n              'pyramid.pid file) [DEPRECATED]'))\n\n    _scheme_re = re.compile(r'^[a-z][a-z]+:', re.I)\n\n    _reloader_environ_key = 'PYTHON_RELOADER_SHOULD_RUN'\n    _monitor_environ_key = 'PASTE_MONITOR_SHOULD_RUN'\n\n    possible_subcommands = ('start', 'stop', 'restart', 'status')\n\n    def __init__(self, argv, quiet=False):\n        self.options, self.args = self.parser.parse_args(argv[1:])\n        if quiet:\n            self.options.verbose = 0\n\n    def out(self, msg): # pragma: no cover\n        if self.options.verbose > 0:\n            print(msg)\n\n    def get_options(self):\n        if (\n                len(self.args) > 1 and\n                self.args[1] in self.possible_subcommands\n        ):\n            restvars = self.args[2:]\n        else:\n            restvars = self.args[1:]\n\n        return parse_vars(restvars)\n\n    def run(self):  # pragma: no cover\n        if self.options.stop_daemon:\n            self._warn_daemon_deprecated()\n            return self.stop_daemon()\n\n        if not hasattr(self.options, 'set_user'):\n            # Windows case:\n            self.options.set_user = self.options.set_group = None\n\n        # @@: Is this the right stage to set the user at?\n        if self.options.set_user or self.options.set_group:\n            self.change_user_group(\n                self.options.set_user, self.options.set_group)\n\n        if not self.args:\n            self.out('You must give a config file')\n            return 2\n        app_spec = self.args[0]\n\n        if (\n                len(self.args) > 1 and\n                self.args[1] in self.possible_subcommands\n        ):\n            cmd = self.args[1]\n        else:\n            cmd = None\n\n        if self.options.reload:\n            if (\n                getattr(self.options, 'daemon', False) or\n                cmd in ('start', 'stop', 'restart')\n            ):\n                self.out(\n                    'Error: Cannot use reloading while running as a dameon.')\n                return 2\n            if os.environ.get(self._reloader_environ_key):\n                if self.options.verbose > 1:\n                    self.out('Running reloading file monitor')\n                install_reloader(int(self.options.reload_interval), [app_spec])\n                # if self.requires_config_file:\n                #     watch_file(self.args[0])\n            else:\n                return self.restart_with_reloader()\n\n        if cmd not in (None, 'start', 'stop', 'restart', 'status'):\n            self.out(\n                'Error: must give start|stop|restart (not %s)' % cmd)\n            return 2\n\n        if cmd == 'status' or self.options.show_status:\n            self._warn_daemon_deprecated()\n            return self.show_status()\n\n        if cmd in ('restart', 'stop'):\n            self._warn_daemon_deprecated()\n            result = self.stop_daemon()\n            if result:\n                if cmd == 'restart':\n                    self.out(\"Could not stop daemon; aborting\")\n                else:\n                    self.out(\"Could not stop daemon\")\n                return result\n            if cmd == 'stop':\n                return result\n            self.options.daemon = True\n\n        if cmd == 'start':\n            self.options.daemon = True\n\n        app_name = self.options.app_name\n\n        vars = self.get_options()\n\n        if not self._scheme_re.search(app_spec):\n            app_spec = 'config:' + app_spec\n        server_name = self.options.server_name\n        if self.options.server:\n            server_spec = 'egg:pyramid'\n            assert server_name is None\n            server_name = self.options.server\n        else:\n            server_spec = app_spec\n        base = os.getcwd()\n\n        # warn before setting a default\n        if self.options.pid_file or self.options.log_file:\n            self._warn_daemon_deprecated()\n\n        if getattr(self.options, 'daemon', False):\n            if not self.options.pid_file:\n                self.options.pid_file = 'pyramid.pid'\n            if not self.options.log_file:\n                self.options.log_file = 'pyramid.log'\n\n        # Ensure the log file is writeable\n        if self.options.log_file:\n            try:\n                writeable_log_file = open(self.options.log_file, 'a')\n            except IOError as ioe:\n                msg = 'Error: Unable to write to log file: %s' % ioe\n                raise ValueError(msg)\n            writeable_log_file.close()\n\n        # Ensure the pid file is writeable\n        if self.options.pid_file:\n            try:\n                writeable_pid_file = open(self.options.pid_file, 'a')\n            except IOError as ioe:\n                msg = 'Error: Unable to write to pid file: %s' % ioe\n                raise ValueError(msg)\n            writeable_pid_file.close()\n\n        # warn before forking\n        if (\n                self.options.monitor_restart and\n                not os.environ.get(self._monitor_environ_key)\n        ):\n            self.out('''\\\n--monitor-restart has been deprecated in Pyramid 1.6. It will be removed\nin a future release per Pyramid's deprecation policy. Please consider using\na real process manager for your processes like Systemd, Circus, or Supervisor.\n''')\n\n        if (\n            getattr(self.options, 'daemon', False) and\n            not os.environ.get(self._monitor_environ_key)\n        ):\n            self._warn_daemon_deprecated()\n            try:\n                self.daemonize()\n            except DaemonizeException as ex:\n                if self.options.verbose > 0:\n                    self.out(str(ex))\n                return 2\n\n        if (\n            not os.environ.get(self._monitor_environ_key) and\n            self.options.pid_file\n        ):\n            self.record_pid(self.options.pid_file)\n\n        if (\n                self.options.monitor_restart and\n                not os.environ.get(self._monitor_environ_key)\n        ):\n            return self.restart_with_monitor()\n\n        if self.options.log_file:\n            stdout_log = LazyWriter(self.options.log_file, 'a')\n            sys.stdout = stdout_log\n            sys.stderr = stdout_log\n            logging.basicConfig(stream=stdout_log)\n\n        log_fn = app_spec\n        if log_fn.startswith('config:'):\n            log_fn = app_spec[len('config:'):]\n        elif log_fn.startswith('egg:'):\n            log_fn = None\n        if log_fn:\n            log_fn = os.path.join(base, log_fn)\n            setup_logging(log_fn)\n\n        server = self.loadserver(server_spec, name=server_name,\n                                 relative_to=base, global_conf=vars)\n\n        app = self.loadapp(app_spec, name=app_name, relative_to=base,\n                global_conf=vars)\n\n        if self.options.verbose > 0:\n            if hasattr(os, 'getpid'):\n                msg = 'Starting server in PID %i.' % os.getpid()\n            else:\n                msg = 'Starting server.'\n            self.out(msg)\n\n        def serve():\n            try:\n                server(app)\n            except (SystemExit, KeyboardInterrupt) as e:\n                if self.options.verbose > 1:\n                    raise\n                if str(e):\n                    msg = ' ' + str(e)\n                else:\n                    msg = ''\n                self.out('Exiting%s (-v to see traceback)' % msg)\n\n        if self.options.browser:\n            def open_browser():\n                context = loadcontext(SERVER, app_spec, name=server_name, relative_to=base,\n                        global_conf=vars)\n                url = 'http://127.0.0.1:{port}/'.format(**context.config())\n                time.sleep(1)\n                webbrowser.open(url)\n            t = threading.Thread(target=open_browser)\n            t.setDaemon(True)\n            t.start()\n\n        serve()\n\n    def loadapp(self, app_spec, name, relative_to, **kw): # pragma: no cover\n        return loadapp(app_spec, name=name, relative_to=relative_to, **kw)\n\n    def loadserver(self, server_spec, name, relative_to, **kw):# pragma:no cover\n        return loadserver(\n            server_spec, name=name, relative_to=relative_to, **kw)\n\n    def quote_first_command_arg(self, arg): # pragma: no cover\n        \"\"\"\n        There's a bug in Windows when running an executable that's\n        located inside a path with a space in it.  This method handles\n        that case, or on non-Windows systems or an executable with no\n        spaces, it just leaves well enough alone.\n        \"\"\"\n        if (sys.platform != 'win32' or ' ' not in arg):\n            # Problem does not apply:\n            return arg\n        try:\n            import win32api\n        except ImportError:\n            raise ValueError(\n                \"The executable %r contains a space, and in order to \"\n                \"handle this issue you must have the win32api module \"\n                \"installed\" % arg)\n        arg = win32api.GetShortPathName(arg)\n        return arg\n\n    def find_script_path(self, name): # pragma: no cover\n        \"\"\"\n        Return the path to the script being invoked by the python interpreter.\n\n        There's an issue on Windows when running the executable from\n        a console_script causing the script name (sys.argv[0]) to\n        not end with .exe or .py and thus cannot be run via popen.\n        \"\"\"\n        if sys.platform == 'win32':\n            if not name.endswith('.exe') and not name.endswith('.py'):\n                name += '.exe'\n        return name\n\n    def daemonize(self): # pragma: no cover\n        pid = live_pidfile(self.options.pid_file)\n        if pid:\n            raise DaemonizeException(\n                \"Daemon is already running (PID: %s from PID file %s)\"\n                % (pid, self.options.pid_file))\n\n        if self.options.verbose > 0:\n            self.out('Entering daemon mode')\n        pid = os.fork()\n        if pid:\n            # The forked process also has a handle on resources, so we\n            # *don't* want proper termination of the process, we just\n            # want to exit quick (which os._exit() does)\n            os._exit(0)\n        # Make this the session leader\n        os.setsid()\n        # Fork again for good measure!\n        pid = os.fork()\n        if pid:\n            os._exit(0)\n\n        # @@: Should we set the umask and cwd now?\n\n        import resource  # Resource usage information.\n        maxfd = resource.getrlimit(resource.RLIMIT_NOFILE)[1]\n        if (maxfd == resource.RLIM_INFINITY):\n            maxfd = MAXFD\n        # Iterate through and close all file descriptors.\n        for fd in range(0, maxfd):\n            try:\n                os.close(fd)\n            except OSError:  # ERROR, fd wasn't open to begin with (ignored)\n                pass\n\n        if (hasattr(os, \"devnull\")):\n            REDIRECT_TO = os.devnull\n        else:\n            REDIRECT_TO = \"/dev/null\"\n        os.open(REDIRECT_TO, os.O_RDWR)  # standard input (0)\n        # Duplicate standard input to standard output and standard error.\n        os.dup2(0, 1)  # standard output (1)\n        os.dup2(0, 2)  # standard error (2)\n\n    def _remove_pid_file(self, written_pid, filename, verbosity):\n        current_pid = os.getpid()\n        if written_pid != current_pid:\n            # A forked process must be exiting, not the process that\n            # wrote the PID file\n            return\n        if not os.path.exists(filename):\n            return\n        with open(filename) as f:\n            content = f.read().strip()\n        try:\n            pid_in_file = int(content)\n        except ValueError:\n            pass\n        else:\n            if pid_in_file != current_pid:\n                msg = \"PID file %s contains %s, not expected PID %s\"\n                self.out(msg % (filename, pid_in_file, current_pid))\n                return\n        if verbosity > 0:\n            self.out(\"Removing PID file %s\" % filename)\n        try:\n            os.unlink(filename)\n            return\n        except OSError as e:\n            # Record, but don't give traceback\n            self.out(\"Cannot remove PID file: (%s)\" % e)\n        # well, at least lets not leave the invalid PID around...\n        try:\n            with open(filename, 'w') as f:\n                f.write('')\n        except OSError as e:\n            self.out('Stale PID left in file: %s (%s)' % (filename, e))\n        else:\n            self.out('Stale PID removed')\n\n    def record_pid(self, pid_file):\n        pid = os.getpid()\n        if self.options.verbose > 1:\n            self.out('Writing PID %s to %s' % (pid, pid_file))\n        with open(pid_file, 'w') as f:\n            f.write(str(pid))\n        atexit.register(self._remove_pid_file, pid, pid_file, self.options.verbose)\n\n    def stop_daemon(self): # pragma: no cover\n        pid_file = self.options.pid_file or 'pyramid.pid'\n        if not os.path.exists(pid_file):\n            self.out('No PID file exists in %s' % pid_file)\n            return 1\n        pid = read_pidfile(pid_file)\n        if not pid:\n            self.out(\"Not a valid PID file in %s\" % pid_file)\n            return 1\n        pid = live_pidfile(pid_file)\n        if not pid:\n            self.out(\"PID in %s is not valid (deleting)\" % pid_file)\n            try:\n                os.unlink(pid_file)\n            except (OSError, IOError) as e:\n                self.out(\"Could not delete: %s\" % e)\n                return 2\n            return 1\n        for j in range(10):\n            if not live_pidfile(pid_file):\n                break\n            import signal\n            kill(pid, signal.SIGTERM)\n            time.sleep(1)\n        else:\n            self.out(\"failed to kill web process %s\" % pid)\n            return 3\n        if os.path.exists(pid_file):\n            os.unlink(pid_file)\n        return 0\n\n    def show_status(self): # pragma: no cover\n        pid_file = self.options.pid_file or 'pyramid.pid'\n        if not os.path.exists(pid_file):\n            self.out('No PID file %s' % pid_file)\n            return 1\n        pid = read_pidfile(pid_file)\n        if not pid:\n            self.out('No PID in file %s' % pid_file)\n            return 1\n        pid = live_pidfile(pid_file)\n        if not pid:\n            self.out('PID %s in %s is not running' % (pid, pid_file))\n            return 1\n        self.out('Server running in PID %s' % pid)\n        return 0\n\n    def restart_with_reloader(self): # pragma: no cover\n        self.restart_with_monitor(reloader=True)\n\n    def restart_with_monitor(self, reloader=False): # pragma: no cover\n        if self.options.verbose > 0:\n            if reloader:\n                self.out('Starting subprocess with file monitor')\n            else:\n                self.out('Starting subprocess with monitor parent')\n        while 1:\n            args = [\n                self.quote_first_command_arg(sys.executable),\n                self.find_script_path(sys.argv[0]),\n            ] + sys.argv[1:]\n            new_environ = os.environ.copy()\n            if reloader:\n                new_environ[self._reloader_environ_key] = 'true'\n            else:\n                new_environ[self._monitor_environ_key] = 'true'\n            proc = None\n            try:\n                try:\n                    _turn_sigterm_into_systemexit()\n                    proc = subprocess.Popen(args, env=new_environ)\n                    exit_code = proc.wait()\n                    proc = None\n                except KeyboardInterrupt:\n                    self.out('^C caught in monitor process')\n                    if self.options.verbose > 1:\n                        raise\n                    return 1\n            finally:\n                if proc is not None:\n                    import signal\n                    try:\n                        kill(proc.pid, signal.SIGTERM)\n                    except (OSError, IOError):\n                        pass\n\n            if reloader:\n                # Reloader always exits with code 3; but if we are\n                # a monitor, any exit code will restart\n                if exit_code != 3:\n                    return exit_code\n            if self.options.verbose > 0:\n                self.out('%s %s %s' % ('-' * 20, 'Restarting', '-' * 20))\n\n    def change_user_group(self, user, group): # pragma: no cover\n        import pwd\n        import grp\n\n        self.out('''\\\nThe --user and --group options have been deprecated in Pyramid 1.6. They will\nbe removed in a future release per Pyramid's deprecation policy. Please\nconsider using a real process manager for your processes like Systemd, Circus,\nor Supervisor, all of which support process security.\n''')\n\n        uid = gid = None\n        if group:\n            try:\n                gid = int(group)\n                group = grp.getgrgid(gid).gr_name\n            except ValueError:\n                import grp\n                try:\n                    entry = grp.getgrnam(group)\n                except KeyError:\n                    raise ValueError(\n                        \"Bad group: %r; no such group exists\" % group)\n                gid = entry.gr_gid\n        try:\n            uid = int(user)\n            user = pwd.getpwuid(uid).pw_name\n        except ValueError:\n            try:\n                entry = pwd.getpwnam(user)\n            except KeyError:\n                raise ValueError(\n                    \"Bad username: %r; no such user exists\" % user)\n            if not gid:\n                gid = entry.pw_gid\n            uid = entry.pw_uid\n        if self.options.verbose > 0:\n            self.out('Changing user to %s:%s (%s:%s)' % (\n                user, group or '(unknown)', uid, gid))\n        if gid:\n            os.setgid(gid)\n        if uid:\n            os.setuid(uid)\n\n    def _warn_daemon_deprecated(self):\n        self.out('''\\\nThe daemon options have been deprecated in Pyramid 1.6. They will be removed\nin a future release per Pyramid's deprecation policy. Please consider using\na real process manager for your processes like Systemd, Circus, or Supervisor.\n\nThe following commands are deprecated:\n    [start,stop,restart,status] --daemon, --stop-server, --status, --pid-file, --log-file\n''')",
                            "ast_type_str": "ClassDef",
                            "start_lineno": 205,
                            "end_lineno": 403,
                            "parent": {
                                "file_name": "pyramid/scripts/pserve.py",
                                "type": "class",
                                "name": "PServeCommand",
                                "content": "class PServeCommand(object):\n\n    usage = '%prog config_uri [start|stop|restart|status] [var=value]'\n    description = \"\"\"\\\n    This command serves a web application that uses a PasteDeploy\n    configuration file for the server and application.\n\n    If start/stop/restart is given, then --daemon is implied, and it will\n    start (normal operation), stop (--stop-daemon), or do both.\n    Note: Daemonization features are deprecated.\n\n    You can also include variable assignments like 'http_port=8080'\n    and then use %(http_port)s in your config files.\n    \"\"\"\n    default_verbosity = 1\n\n    parser = optparse.OptionParser(\n        usage,\n        description=textwrap.dedent(description)\n        )\n    parser.add_option(\n        '-n', '--app-name',\n        dest='app_name',\n        metavar='NAME',\n        help=\"Load the named application (default main)\")\n    parser.add_option(\n        '-s', '--server',\n        dest='server',\n        metavar='SERVER_TYPE',\n        help=\"Use the named server.\")\n    parser.add_option(\n        '--server-name',\n        dest='server_name',\n        metavar='SECTION_NAME',\n        help=(\"Use the named server as defined in the configuration file \"\n              \"(default: main)\"))\n    if hasattr(os, 'fork'):\n        parser.add_option(\n            '--daemon',\n            dest=\"daemon\",\n            action=\"store_true\",\n            help=\"Run in daemon (background) mode [DEPRECATED]\")\n    parser.add_option(\n        '--pid-file',\n        dest='pid_file',\n        metavar='FILENAME',\n        help=(\"Save PID to file (default to pyramid.pid if running in \"\n              \"daemon mode) [DEPRECATED]\"))\n    parser.add_option(\n        '--log-file',\n        dest='log_file',\n        metavar='LOG_FILE',\n        help=\"Save output to the given log file (redirects stdout) [DEPRECATED]\")\n    parser.add_option(\n        '--reload',\n        dest='reload',\n        action='store_true',\n        help=\"Use auto-restart file monitor\")\n    parser.add_option(\n        '--reload-interval',\n        dest='reload_interval',\n        default=1,\n        help=(\"Seconds between checking files (low number can cause \"\n              \"significant CPU usage)\"))\n    parser.add_option(\n        '--monitor-restart',\n        dest='monitor_restart',\n        action='store_true',\n        help=\"Auto-restart server if it dies [DEPRECATED]\")\n    parser.add_option(\n        '-b', '--browser',\n        dest='browser',\n        action='store_true',\n        help=\"Open a web browser to server url\")\n    parser.add_option(\n        '--status',\n        action='store_true',\n        dest='show_status',\n        help=(\"Show the status of the (presumably daemonized) server \"\n              \"[DEPRECATED]\"))\n    parser.add_option(\n        '-v', '--verbose',\n        default=default_verbosity,\n        dest='verbose',\n        action='count',\n        help=\"Set verbose level (default \" + str(default_verbosity) + \")\")\n    parser.add_option(\n        '-q', '--quiet',\n        action='store_const',\n        const=0,\n        dest='verbose',\n        help=\"Suppress verbose output\")\n\n    if hasattr(os, 'setuid'):\n        # I don't think these are available on Windows\n        parser.add_option(\n            '--user',\n            dest='set_user',\n            metavar=\"USERNAME\",\n            help=\"Set the user (usually only possible when run as root)\")\n        parser.add_option(\n            '--group',\n            dest='set_group',\n            metavar=\"GROUP\",\n            help=\"Set the group (usually only possible when run as root)\")\n\n    parser.add_option(\n        '--stop-daemon',\n        dest='stop_daemon',\n        action='store_true',\n        help=('Stop a daemonized server (given a PID file, or default '\n              'pyramid.pid file) [DEPRECATED]'))\n\n    _scheme_re = re.compile(r'^[a-z][a-z]+:', re.I)\n\n    _reloader_environ_key = 'PYTHON_RELOADER_SHOULD_RUN'\n    _monitor_environ_key = 'PASTE_MONITOR_SHOULD_RUN'\n\n    possible_subcommands = ('start', 'stop', 'restart', 'status')\n\n    def __init__(self, argv, quiet=False):\n        self.options, self.args = self.parser.parse_args(argv[1:])\n        if quiet:\n            self.options.verbose = 0\n\n    def out(self, msg): # pragma: no cover\n        if self.options.verbose > 0:\n            print(msg)\n\n    def get_options(self):\n        if (\n                len(self.args) > 1 and\n                self.args[1] in self.possible_subcommands\n        ):\n            restvars = self.args[2:]\n        else:\n            restvars = self.args[1:]\n\n        return parse_vars(restvars)\n\n    def run(self):  # pragma: no cover\n        if self.options.stop_daemon:\n            self._warn_daemon_deprecated()\n            return self.stop_daemon()\n\n        if not hasattr(self.options, 'set_user'):\n            # Windows case:\n            self.options.set_user = self.options.set_group = None\n\n        # @@: Is this the right stage to set the user at?\n        if self.options.set_user or self.options.set_group:\n            self.change_user_group(\n                self.options.set_user, self.options.set_group)\n\n        if not self.args:\n            self.out('You must give a config file')\n            return 2\n        app_spec = self.args[0]\n\n        if (\n                len(self.args) > 1 and\n                self.args[1] in self.possible_subcommands\n        ):\n            cmd = self.args[1]\n        else:\n            cmd = None\n\n        if self.options.reload:\n            if (\n                getattr(self.options, 'daemon', False) or\n                cmd in ('start', 'stop', 'restart')\n            ):\n                self.out(\n                    'Error: Cannot use reloading while running as a dameon.')\n                return 2\n            if os.environ.get(self._reloader_environ_key):\n                if self.options.verbose > 1:\n                    self.out('Running reloading file monitor')\n                install_reloader(int(self.options.reload_interval), [app_spec])\n                # if self.requires_config_file:\n                #     watch_file(self.args[0])\n            else:\n                return self.restart_with_reloader()\n\n        if cmd not in (None, 'start', 'stop', 'restart', 'status'):\n            self.out(\n                'Error: must give start|stop|restart (not %s)' % cmd)\n            return 2\n\n        if cmd == 'status' or self.options.show_status:\n            self._warn_daemon_deprecated()\n            return self.show_status()\n\n        if cmd in ('restart', 'stop'):\n            self._warn_daemon_deprecated()\n            result = self.stop_daemon()\n            if result:\n                if cmd == 'restart':\n                    self.out(\"Could not stop daemon; aborting\")\n                else:\n                    self.out(\"Could not stop daemon\")\n                return result\n            if cmd == 'stop':\n                return result\n            self.options.daemon = True\n\n        if cmd == 'start':\n            self.options.daemon = True\n\n        app_name = self.options.app_name\n\n        vars = self.get_options()\n\n        if not self._scheme_re.search(app_spec):\n            app_spec = 'config:' + app_spec\n        server_name = self.options.server_name\n        if self.options.server:\n            server_spec = 'egg:pyramid'\n            assert server_name is None\n            server_name = self.options.server\n        else:\n            server_spec = app_spec\n        base = os.getcwd()\n\n        # warn before setting a default\n        if self.options.pid_file or self.options.log_file:\n            self._warn_daemon_deprecated()\n\n        if getattr(self.options, 'daemon', False):\n            if not self.options.pid_file:\n                self.options.pid_file = 'pyramid.pid'\n            if not self.options.log_file:\n                self.options.log_file = 'pyramid.log'\n\n        # Ensure the log file is writeable\n        if self.options.log_file:\n            try:\n                writeable_log_file = open(self.options.log_file, 'a')\n            except IOError as ioe:\n                msg = 'Error: Unable to write to log file: %s' % ioe\n                raise ValueError(msg)\n            writeable_log_file.close()\n\n        # Ensure the pid file is writeable\n        if self.options.pid_file:\n            try:\n                writeable_pid_file = open(self.options.pid_file, 'a')\n            except IOError as ioe:\n                msg = 'Error: Unable to write to pid file: %s' % ioe\n                raise ValueError(msg)\n            writeable_pid_file.close()\n\n        # warn before forking\n        if (\n                self.options.monitor_restart and\n                not os.environ.get(self._monitor_environ_key)\n        ):\n            self.out('''\\\n--monitor-restart has been deprecated in Pyramid 1.6. It will be removed\nin a future release per Pyramid's deprecation policy. Please consider using\na real process manager for your processes like Systemd, Circus, or Supervisor.\n''')\n\n        if (\n            getattr(self.options, 'daemon', False) and\n            not os.environ.get(self._monitor_environ_key)\n        ):\n            self._warn_daemon_deprecated()\n            try:\n                self.daemonize()\n            except DaemonizeException as ex:\n                if self.options.verbose > 0:\n                    self.out(str(ex))\n                return 2\n\n        if (\n            not os.environ.get(self._monitor_environ_key) and\n            self.options.pid_file\n        ):\n            self.record_pid(self.options.pid_file)\n\n        if (\n                self.options.monitor_restart and\n                not os.environ.get(self._monitor_environ_key)\n        ):\n            return self.restart_with_monitor()\n\n        if self.options.log_file:\n            stdout_log = LazyWriter(self.options.log_file, 'a')\n            sys.stdout = stdout_log\n            sys.stderr = stdout_log\n            logging.basicConfig(stream=stdout_log)\n\n        log_fn = app_spec\n        if log_fn.startswith('config:'):\n            log_fn = app_spec[len('config:'):]\n        elif log_fn.startswith('egg:'):\n            log_fn = None\n        if log_fn:\n            log_fn = os.path.join(base, log_fn)\n            setup_logging(log_fn)\n\n        server = self.loadserver(server_spec, name=server_name,\n                                 relative_to=base, global_conf=vars)\n\n        app = self.loadapp(app_spec, name=app_name, relative_to=base,\n                global_conf=vars)\n\n        if self.options.verbose > 0:\n            if hasattr(os, 'getpid'):\n                msg = 'Starting server in PID %i.' % os.getpid()\n            else:\n                msg = 'Starting server.'\n            self.out(msg)\n\n        def serve():\n            try:\n                server(app)\n            except (SystemExit, KeyboardInterrupt) as e:\n                if self.options.verbose > 1:\n                    raise\n                if str(e):\n                    msg = ' ' + str(e)\n                else:\n                    msg = ''\n                self.out('Exiting%s (-v to see traceback)' % msg)\n\n        if self.options.browser:\n            def open_browser():\n                context = loadcontext(SERVER, app_spec, name=server_name, relative_to=base,\n                        global_conf=vars)\n                url = 'http://127.0.0.1:{port}/'.format(**context.config())\n                time.sleep(1)\n                webbrowser.open(url)\n            t = threading.Thread(target=open_browser)\n            t.setDaemon(True)\n            t.start()\n\n        serve()\n\n    def loadapp(self, app_spec, name, relative_to, **kw): # pragma: no cover\n        return loadapp(app_spec, name=name, relative_to=relative_to, **kw)\n\n    def loadserver(self, server_spec, name, relative_to, **kw):# pragma:no cover\n        return loadserver(\n            server_spec, name=name, relative_to=relative_to, **kw)\n\n    def quote_first_command_arg(self, arg): # pragma: no cover\n        \"\"\"\n        There's a bug in Windows when running an executable that's\n        located inside a path with a space in it.  This method handles\n        that case, or on non-Windows systems or an executable with no\n        spaces, it just leaves well enough alone.\n        \"\"\"\n        if (sys.platform != 'win32' or ' ' not in arg):\n            # Problem does not apply:\n            return arg\n        try:\n            import win32api\n        except ImportError:\n            raise ValueError(\n                \"The executable %r contains a space, and in order to \"\n                \"handle this issue you must have the win32api module \"\n                \"installed\" % arg)\n        arg = win32api.GetShortPathName(arg)\n        return arg\n\n    def find_script_path(self, name): # pragma: no cover\n        \"\"\"\n        Return the path to the script being invoked by the python interpreter.\n\n        There's an issue on Windows when running the executable from\n        a console_script causing the script name (sys.argv[0]) to\n        not end with .exe or .py and thus cannot be run via popen.\n        \"\"\"\n        if sys.platform == 'win32':\n            if not name.endswith('.exe') and not name.endswith('.py'):\n                name += '.exe'\n        return name\n\n    def daemonize(self): # pragma: no cover\n        pid = live_pidfile(self.options.pid_file)\n        if pid:\n            raise DaemonizeException(\n                \"Daemon is already running (PID: %s from PID file %s)\"\n                % (pid, self.options.pid_file))\n\n        if self.options.verbose > 0:\n            self.out('Entering daemon mode')\n        pid = os.fork()\n        if pid:\n            # The forked process also has a handle on resources, so we\n            # *don't* want proper termination of the process, we just\n            # want to exit quick (which os._exit() does)\n            os._exit(0)\n        # Make this the session leader\n        os.setsid()\n        # Fork again for good measure!\n        pid = os.fork()\n        if pid:\n            os._exit(0)\n\n        # @@: Should we set the umask and cwd now?\n\n        import resource  # Resource usage information.\n        maxfd = resource.getrlimit(resource.RLIMIT_NOFILE)[1]\n        if (maxfd == resource.RLIM_INFINITY):\n            maxfd = MAXFD\n        # Iterate through and close all file descriptors.\n        for fd in range(0, maxfd):\n            try:\n                os.close(fd)\n            except OSError:  # ERROR, fd wasn't open to begin with (ignored)\n                pass\n\n        if (hasattr(os, \"devnull\")):\n            REDIRECT_TO = os.devnull\n        else:\n            REDIRECT_TO = \"/dev/null\"\n        os.open(REDIRECT_TO, os.O_RDWR)  # standard input (0)\n        # Duplicate standard input to standard output and standard error.\n        os.dup2(0, 1)  # standard output (1)\n        os.dup2(0, 2)  # standard error (2)\n\n    def _remove_pid_file(self, written_pid, filename, verbosity):\n        current_pid = os.getpid()\n        if written_pid != current_pid:\n            # A forked process must be exiting, not the process that\n            # wrote the PID file\n            return\n        if not os.path.exists(filename):\n            return\n        with open(filename) as f:\n            content = f.read().strip()\n        try:\n            pid_in_file = int(content)\n        except ValueError:\n            pass\n        else:\n            if pid_in_file != current_pid:\n                msg = \"PID file %s contains %s, not expected PID %s\"\n                self.out(msg % (filename, pid_in_file, current_pid))\n                return\n        if verbosity > 0:\n            self.out(\"Removing PID file %s\" % filename)\n        try:\n            os.unlink(filename)\n            return\n        except OSError as e:\n            # Record, but don't give traceback\n            self.out(\"Cannot remove PID file: (%s)\" % e)\n        # well, at least lets not leave the invalid PID around...\n        try:\n            with open(filename, 'w') as f:\n                f.write('')\n        except OSError as e:\n            self.out('Stale PID left in file: %s (%s)' % (filename, e))\n        else:\n            self.out('Stale PID removed')\n\n    def record_pid(self, pid_file):\n        pid = os.getpid()\n        if self.options.verbose > 1:\n            self.out('Writing PID %s to %s' % (pid, pid_file))\n        with open(pid_file, 'w') as f:\n            f.write(str(pid))\n        atexit.register(self._remove_pid_file, pid, pid_file, self.options.verbose)\n\n    def stop_daemon(self): # pragma: no cover\n        pid_file = self.options.pid_file or 'pyramid.pid'\n        if not os.path.exists(pid_file):\n            self.out('No PID file exists in %s' % pid_file)\n            return 1\n        pid = read_pidfile(pid_file)\n        if not pid:\n            self.out(\"Not a valid PID file in %s\" % pid_file)\n            return 1\n        pid = live_pidfile(pid_file)\n        if not pid:\n            self.out(\"PID in %s is not valid (deleting)\" % pid_file)\n            try:\n                os.unlink(pid_file)\n            except (OSError, IOError) as e:\n                self.out(\"Could not delete: %s\" % e)\n                return 2\n            return 1\n        for j in range(10):\n            if not live_pidfile(pid_file):\n                break\n            import signal\n            kill(pid, signal.SIGTERM)\n            time.sleep(1)\n        else:\n            self.out(\"failed to kill web process %s\" % pid)\n            return 3\n        if os.path.exists(pid_file):\n            os.unlink(pid_file)\n        return 0\n\n    def show_status(self): # pragma: no cover\n        pid_file = self.options.pid_file or 'pyramid.pid'\n        if not os.path.exists(pid_file):\n            self.out('No PID file %s' % pid_file)\n            return 1\n        pid = read_pidfile(pid_file)\n        if not pid:\n            self.out('No PID in file %s' % pid_file)\n            return 1\n        pid = live_pidfile(pid_file)\n        if not pid:\n            self.out('PID %s in %s is not running' % (pid, pid_file))\n            return 1\n        self.out('Server running in PID %s' % pid)\n        return 0\n\n    def restart_with_reloader(self): # pragma: no cover\n        self.restart_with_monitor(reloader=True)\n\n    def restart_with_monitor(self, reloader=False): # pragma: no cover\n        if self.options.verbose > 0:\n            if reloader:\n                self.out('Starting subprocess with file monitor')\n            else:\n                self.out('Starting subprocess with monitor parent')\n        while 1:\n            args = [\n                self.quote_first_command_arg(sys.executable),\n                self.find_script_path(sys.argv[0]),\n            ] + sys.argv[1:]\n            new_environ = os.environ.copy()\n            if reloader:\n                new_environ[self._reloader_environ_key] = 'true'\n            else:\n                new_environ[self._monitor_environ_key] = 'true'\n            proc = None\n            try:\n                try:\n                    _turn_sigterm_into_systemexit()\n                    proc = subprocess.Popen(args, env=new_environ)\n                    exit_code = proc.wait()\n                    proc = None\n                except KeyboardInterrupt:\n                    self.out('^C caught in monitor process')\n                    if self.options.verbose > 1:\n                        raise\n                    return 1\n            finally:\n                if proc is not None:\n                    import signal\n                    try:\n                        kill(proc.pid, signal.SIGTERM)\n                    except (OSError, IOError):\n                        pass\n\n            if reloader:\n                # Reloader always exits with code 3; but if we are\n                # a monitor, any exit code will restart\n                if exit_code != 3:\n                    return exit_code\n            if self.options.verbose > 0:\n                self.out('%s %s %s' % ('-' * 20, 'Restarting', '-' * 20))\n\n    def change_user_group(self, user, group): # pragma: no cover\n        import pwd\n        import grp\n\n        self.out('''\\\nThe --user and --group options have been deprecated in Pyramid 1.6. They will\nbe removed in a future release per Pyramid's deprecation policy. Please\nconsider using a real process manager for your processes like Systemd, Circus,\nor Supervisor, all of which support process security.\n''')\n\n        uid = gid = None\n        if group:\n            try:\n                gid = int(group)\n                group = grp.getgrgid(gid).gr_name\n            except ValueError:\n                import grp\n                try:\n                    entry = grp.getgrnam(group)\n                except KeyError:\n                    raise ValueError(\n                        \"Bad group: %r; no such group exists\" % group)\n                gid = entry.gr_gid\n        try:\n            uid = int(user)\n            user = pwd.getpwuid(uid).pw_name\n        except ValueError:\n            try:\n                entry = pwd.getpwnam(user)\n            except KeyError:\n                raise ValueError(\n                    \"Bad username: %r; no such user exists\" % user)\n            if not gid:\n                gid = entry.pw_gid\n            uid = entry.pw_uid\n        if self.options.verbose > 0:\n            self.out('Changing user to %s:%s (%s:%s)' % (\n                user, group or '(unknown)', uid, gid))\n        if gid:\n            os.setgid(gid)\n        if uid:\n            os.setuid(uid)\n\n    def _warn_daemon_deprecated(self):\n        self.out('''\\\nThe daemon options have been deprecated in Pyramid 1.6. They will be removed\nin a future release per Pyramid's deprecation policy. Please consider using\na real process manager for your processes like Systemd, Circus, or Supervisor.\n\nThe following commands are deprecated:\n    [start,stop,restart,status] --daemon, --stop-server, --status, --pid-file, --log-file\n''')",
                                "ast_type_str": "ClassDef",
                                "start_lineno": 65,
                                "end_lineno": 679,
                                "parent": null
                            }
                        }
                    ],
                    "added_entities": [],
                    "deleted_entities": []
                }
            ]
        },
        {
            "old_file_content": "import os\nimport unittest\n\nhere = os.path.dirname(__file__)\n\nclass Test_get_app(unittest.TestCase):\n    def _callFUT(self, config_file, section_name, **kw):\n        from pyramid.paster import get_app\n        return get_app(config_file, section_name, **kw)\n\n    def test_it(self):\n        app = DummyApp()\n        loadapp = DummyLoadWSGI(app)\n        result = self._callFUT('/foo/bar/myapp.ini', 'myapp', loadapp=loadapp)\n        self.assertEqual(loadapp.config_name, 'config:/foo/bar/myapp.ini')\n        self.assertEqual(loadapp.section_name, 'myapp')\n        self.assertEqual(loadapp.relative_to, os.getcwd())\n        self.assertEqual(result, app)\n\n    def test_it_with_hash(self):\n        app = DummyApp()\n        loadapp = DummyLoadWSGI(app)\n        result = self._callFUT(\n            '/foo/bar/myapp.ini#myapp', None, loadapp=loadapp\n            )\n        self.assertEqual(loadapp.config_name, 'config:/foo/bar/myapp.ini')\n        self.assertEqual(loadapp.section_name, 'myapp')\n        self.assertEqual(loadapp.relative_to, os.getcwd())\n        self.assertEqual(result, app)\n\n    def test_it_with_hash_and_name_override(self):\n        app = DummyApp()\n        loadapp = DummyLoadWSGI(app)\n        result = self._callFUT(\n            '/foo/bar/myapp.ini#myapp', 'yourapp', loadapp=loadapp\n            )\n        self.assertEqual(loadapp.config_name, 'config:/foo/bar/myapp.ini')\n        self.assertEqual(loadapp.section_name, 'yourapp')\n        self.assertEqual(loadapp.relative_to, os.getcwd())\n        self.assertEqual(result, app)\n\n    def test_it_with_options(self):\n        app = DummyApp()\n        loadapp = DummyLoadWSGI(app)\n        options = {'a':1}\n        result = self._callFUT(\n            '/foo/bar/myapp.ini#myapp',\n            'yourapp',\n            loadapp=loadapp,\n            options=options,\n            )\n        self.assertEqual(loadapp.config_name, 'config:/foo/bar/myapp.ini')\n        self.assertEqual(loadapp.section_name, 'yourapp')\n        self.assertEqual(loadapp.relative_to, os.getcwd())\n        self.assertEqual(loadapp.kw, {'global_conf':options})\n        self.assertEqual(result, app)\n\n    def test_it_with_dummyapp_requiring_options(self):\n        options = {'bar': 'baz'}\n        app = self._callFUT(\n            os.path.join(here, 'fixtures', 'dummy.ini'),\n            'myapp', options=options)\n        self.assertEqual(app.settings['foo'], 'baz')\n\nclass Test_get_appsettings(unittest.TestCase):\n    def _callFUT(self, config_file, section_name, **kw):\n        from pyramid.paster import get_appsettings\n        return get_appsettings(config_file, section_name, **kw)\n\n    def test_it(self):\n        values = {'a':1}\n        appconfig = DummyLoadWSGI(values)\n        result = self._callFUT('/foo/bar/myapp.ini', 'myapp',\n                               appconfig=appconfig)\n        self.assertEqual(appconfig.config_name, 'config:/foo/bar/myapp.ini')\n        self.assertEqual(appconfig.section_name, 'myapp')\n        self.assertEqual(appconfig.relative_to, os.getcwd())\n        self.assertEqual(result, values)\n\n    def test_it_with_hash(self):\n        values = {'a':1}\n        appconfig = DummyLoadWSGI(values)\n        result = self._callFUT('/foo/bar/myapp.ini#myapp', None,\n                               appconfig=appconfig)\n        self.assertEqual(appconfig.config_name, 'config:/foo/bar/myapp.ini')\n        self.assertEqual(appconfig.section_name, 'myapp')\n        self.assertEqual(appconfig.relative_to, os.getcwd())\n        self.assertEqual(result, values)\n\n    def test_it_with_hash_and_name_override(self):\n        values = {'a':1}\n        appconfig = DummyLoadWSGI(values)\n        result = self._callFUT('/foo/bar/myapp.ini#myapp', 'yourapp',\n                               appconfig=appconfig)\n        self.assertEqual(appconfig.config_name, 'config:/foo/bar/myapp.ini')\n        self.assertEqual(appconfig.section_name, 'yourapp')\n        self.assertEqual(appconfig.relative_to, os.getcwd())\n        self.assertEqual(result, values)\n\n    def test_it_with_dummyapp_requiring_options(self):\n        options = {'bar': 'baz'}\n        result = self._callFUT(\n            os.path.join(here, 'fixtures', 'dummy.ini'),\n            'myapp', options=options)\n        self.assertEqual(result['foo'], 'baz')\n\nclass Test_setup_logging(unittest.TestCase):\n    def _callFUT(self, config_file):\n        from pyramid.paster import setup_logging\n        dummy_cp = DummyConfigParserModule\n        return setup_logging(config_file, self.fileConfig, dummy_cp)\n\n    def test_it(self):\n        config_file, dict = self._callFUT('/abc')\n        # os.path.abspath is a sop to Windows\n        self.assertEqual(config_file, os.path.abspath('/abc'))\n        self.assertEqual(dict['__file__'], os.path.abspath('/abc'))\n        self.assertEqual(dict['here'], os.path.abspath('/'))\n\n    def fileConfig(self, config_file, dict):\n        return config_file, dict\n\nclass Test_bootstrap(unittest.TestCase):\n    def _callFUT(self, config_uri, request=None):\n        from pyramid.paster import bootstrap\n        return bootstrap(config_uri, request)\n\n    def setUp(self):\n        import pyramid.paster\n        self.original_get_app = pyramid.paster.get_app\n        self.original_prepare = pyramid.paster.prepare\n        self.app = app = DummyApp()\n        self.root = root = Dummy()\n\n        class DummyGetApp(object):\n            def __call__(self, *a, **kw):\n                self.a = a\n                self.kw = kw\n                return app\n        self.get_app = pyramid.paster.get_app = DummyGetApp()\n\n        class DummyPrepare(object):\n            def __call__(self, *a, **kw):\n                self.a = a\n                self.kw = kw\n                return {'root':root, 'closer':lambda: None}\n        self.getroot = pyramid.paster.prepare = DummyPrepare()\n\n    def tearDown(self):\n        import pyramid.paster\n        pyramid.paster.get_app = self.original_get_app\n        pyramid.paster.prepare = self.original_prepare\n\n    def test_it_request_with_registry(self):\n        request = DummyRequest({})\n        request.registry = dummy_registry\n        result = self._callFUT('/foo/bar/myapp.ini', request)\n        self.assertEqual(result['app'], self.app)\n        self.assertEqual(result['root'], self.root)\n        self.assertTrue('closer' in result)\n\nclass Dummy:\n    pass\n\nclass DummyRegistry(object):\n    settings = {}\n\ndummy_registry = DummyRegistry()\n\nclass DummyLoadWSGI:\n    def __init__(self, result):\n        self.result = result\n\n    def __call__(self, config_name, name=None, relative_to=None, **kw):\n        self.config_name = config_name\n        self.section_name = name\n        self.relative_to = relative_to\n        self.kw = kw\n        return self.result\n\nclass DummyApp:\n    def __init__(self):\n        self.registry = dummy_registry\n\ndef make_dummyapp(global_conf, **settings):\n    app = DummyApp()\n    app.settings = settings\n    app.global_conf = global_conf\n    return app\n\nclass DummyRequest:\n    application_url = 'http://example.com:5432'\n    script_name = ''\n    def __init__(self, environ):\n        self.environ = environ\n        self.matchdict = {}\n\nclass DummyConfigParser(object):\n    def read(self, x):\n        pass\n\n    def has_section(self, name):\n        return True\n\nclass DummyConfigParserModule(object):\n    ConfigParser = DummyConfigParser\n",
            "new_file_content": "import os\nimport unittest\n\nhere = os.path.dirname(__file__)\n\nclass Test_get_app(unittest.TestCase):\n    def _callFUT(self, config_file, section_name, **kw):\n        from pyramid.paster import get_app\n        return get_app(config_file, section_name, **kw)\n\n    def test_it(self):\n        app = DummyApp()\n        loadapp = DummyLoadWSGI(app)\n        result = self._callFUT('/foo/bar/myapp.ini', 'myapp', loadapp=loadapp)\n        self.assertEqual(loadapp.config_name, 'config:/foo/bar/myapp.ini')\n        self.assertEqual(loadapp.section_name, 'myapp')\n        self.assertEqual(loadapp.relative_to, os.getcwd())\n        self.assertEqual(result, app)\n\n    def test_it_with_hash(self):\n        app = DummyApp()\n        loadapp = DummyLoadWSGI(app)\n        result = self._callFUT(\n            '/foo/bar/myapp.ini#myapp', None, loadapp=loadapp\n            )\n        self.assertEqual(loadapp.config_name, 'config:/foo/bar/myapp.ini')\n        self.assertEqual(loadapp.section_name, 'myapp')\n        self.assertEqual(loadapp.relative_to, os.getcwd())\n        self.assertEqual(result, app)\n\n    def test_it_with_hash_and_name_override(self):\n        app = DummyApp()\n        loadapp = DummyLoadWSGI(app)\n        result = self._callFUT(\n            '/foo/bar/myapp.ini#myapp', 'yourapp', loadapp=loadapp\n            )\n        self.assertEqual(loadapp.config_name, 'config:/foo/bar/myapp.ini')\n        self.assertEqual(loadapp.section_name, 'yourapp')\n        self.assertEqual(loadapp.relative_to, os.getcwd())\n        self.assertEqual(result, app)\n\n    def test_it_with_options(self):\n        app = DummyApp()\n        loadapp = DummyLoadWSGI(app)\n        options = {'a':1}\n        result = self._callFUT(\n            '/foo/bar/myapp.ini#myapp',\n            'yourapp',\n            loadapp=loadapp,\n            options=options,\n            )\n        self.assertEqual(loadapp.config_name, 'config:/foo/bar/myapp.ini')\n        self.assertEqual(loadapp.section_name, 'yourapp')\n        self.assertEqual(loadapp.relative_to, os.getcwd())\n        self.assertEqual(loadapp.kw, {'global_conf':options})\n        self.assertEqual(result, app)\n\n    def test_it_with_dummyapp_requiring_options(self):\n        options = {'bar': 'baz'}\n        app = self._callFUT(\n            os.path.join(here, 'fixtures', 'dummy.ini'),\n            'myapp', options=options)\n        self.assertEqual(app.settings['foo'], 'baz')\n\nclass Test_get_appsettings(unittest.TestCase):\n    def _callFUT(self, config_file, section_name, **kw):\n        from pyramid.paster import get_appsettings\n        return get_appsettings(config_file, section_name, **kw)\n\n    def test_it(self):\n        values = {'a':1}\n        appconfig = DummyLoadWSGI(values)\n        result = self._callFUT('/foo/bar/myapp.ini', 'myapp',\n                               appconfig=appconfig)\n        self.assertEqual(appconfig.config_name, 'config:/foo/bar/myapp.ini')\n        self.assertEqual(appconfig.section_name, 'myapp')\n        self.assertEqual(appconfig.relative_to, os.getcwd())\n        self.assertEqual(result, values)\n\n    def test_it_with_hash(self):\n        values = {'a':1}\n        appconfig = DummyLoadWSGI(values)\n        result = self._callFUT('/foo/bar/myapp.ini#myapp', None,\n                               appconfig=appconfig)\n        self.assertEqual(appconfig.config_name, 'config:/foo/bar/myapp.ini')\n        self.assertEqual(appconfig.section_name, 'myapp')\n        self.assertEqual(appconfig.relative_to, os.getcwd())\n        self.assertEqual(result, values)\n\n    def test_it_with_hash_and_name_override(self):\n        values = {'a':1}\n        appconfig = DummyLoadWSGI(values)\n        result = self._callFUT('/foo/bar/myapp.ini#myapp', 'yourapp',\n                               appconfig=appconfig)\n        self.assertEqual(appconfig.config_name, 'config:/foo/bar/myapp.ini')\n        self.assertEqual(appconfig.section_name, 'yourapp')\n        self.assertEqual(appconfig.relative_to, os.getcwd())\n        self.assertEqual(result, values)\n\n    def test_it_with_dummyapp_requiring_options(self):\n        options = {'bar': 'baz'}\n        result = self._callFUT(\n            os.path.join(here, 'fixtures', 'dummy.ini'),\n            'myapp', options=options)\n        self.assertEqual(result['foo'], 'baz')\n\nclass Test_setup_logging(unittest.TestCase):\n    def _callFUT(self, config_file, global_conf=None):\n        from pyramid.paster import setup_logging\n        dummy_cp = DummyConfigParserModule\n        return setup_logging(\n            config_uri=config_file,\n            global_conf=global_conf,\n            fileConfig=self.fileConfig,\n            configparser=dummy_cp,\n            )\n\n    def test_it_no_global_conf(self):\n        config_file, dict = self._callFUT('/abc')\n        # os.path.abspath is a sop to Windows\n        self.assertEqual(config_file, os.path.abspath('/abc'))\n        self.assertEqual(dict['__file__'], os.path.abspath('/abc'))\n        self.assertEqual(dict['here'], os.path.abspath('/'))\n\n    def test_it_global_conf_empty(self):\n        config_file, dict = self._callFUT('/abc', global_conf={})\n        # os.path.abspath is a sop to Windows\n        self.assertEqual(config_file, os.path.abspath('/abc'))\n        self.assertEqual(dict['__file__'], os.path.abspath('/abc'))\n        self.assertEqual(dict['here'], os.path.abspath('/'))\n\n    def test_it_global_conf_not_empty(self):\n        config_file, dict = self._callFUT('/abc', global_conf={'key': 'val'})\n        # os.path.abspath is a sop to Windows\n        self.assertEqual(config_file, os.path.abspath('/abc'))\n        self.assertEqual(dict['__file__'], os.path.abspath('/abc'))\n        self.assertEqual(dict['here'], os.path.abspath('/'))\n        self.assertEqual(dict['key'], 'val')\n\n    def fileConfig(self, config_file, dict):\n        return config_file, dict\n\nclass Test_bootstrap(unittest.TestCase):\n    def _callFUT(self, config_uri, request=None):\n        from pyramid.paster import bootstrap\n        return bootstrap(config_uri, request)\n\n    def setUp(self):\n        import pyramid.paster\n        self.original_get_app = pyramid.paster.get_app\n        self.original_prepare = pyramid.paster.prepare\n        self.app = app = DummyApp()\n        self.root = root = Dummy()\n\n        class DummyGetApp(object):\n            def __call__(self, *a, **kw):\n                self.a = a\n                self.kw = kw\n                return app\n        self.get_app = pyramid.paster.get_app = DummyGetApp()\n\n        class DummyPrepare(object):\n            def __call__(self, *a, **kw):\n                self.a = a\n                self.kw = kw\n                return {'root':root, 'closer':lambda: None}\n        self.getroot = pyramid.paster.prepare = DummyPrepare()\n\n    def tearDown(self):\n        import pyramid.paster\n        pyramid.paster.get_app = self.original_get_app\n        pyramid.paster.prepare = self.original_prepare\n\n    def test_it_request_with_registry(self):\n        request = DummyRequest({})\n        request.registry = dummy_registry\n        result = self._callFUT('/foo/bar/myapp.ini', request)\n        self.assertEqual(result['app'], self.app)\n        self.assertEqual(result['root'], self.root)\n        self.assertTrue('closer' in result)\n\nclass Dummy:\n    pass\n\nclass DummyRegistry(object):\n    settings = {}\n\ndummy_registry = DummyRegistry()\n\nclass DummyLoadWSGI:\n    def __init__(self, result):\n        self.result = result\n\n    def __call__(self, config_name, name=None, relative_to=None, **kw):\n        self.config_name = config_name\n        self.section_name = name\n        self.relative_to = relative_to\n        self.kw = kw\n        return self.result\n\nclass DummyApp:\n    def __init__(self):\n        self.registry = dummy_registry\n\ndef make_dummyapp(global_conf, **settings):\n    app = DummyApp()\n    app.settings = settings\n    app.global_conf = global_conf\n    return app\n\nclass DummyRequest:\n    application_url = 'http://example.com:5432'\n    script_name = ''\n    def __init__(self, environ):\n        self.environ = environ\n        self.matchdict = {}\n\nclass DummyConfigParser(object):\n    def read(self, x):\n        pass\n\n    def has_section(self, name):\n        return True\n\nclass DummyConfigParserModule(object):\n    ConfigParser = DummyConfigParser\n",
            "header": {
                "file": {
                    "path": "pyramid/tests/test_paster.py"
                },
                "misc_line": null
            },
            "index_line": {
                "old_commit_hash": "5e341172c",
                "new_commit_hash": "22a5cde3d",
                "mode": "100644"
            },
            "is_binary_file": false,
            "binary_line": null,
            "minus_file": {
                "path": "a/pyramid/tests/test_paster.py"
            },
            "plus_file": {
                "path": "b/pyramid/tests/test_paster.py"
            },
            "hunks": [
                {
                    "descriptor": {
                        "old_range": {
                            "start": 105,
                            "length": 18
                        },
                        "new_range": {
                            "start": 105,
                            "length": 38
                        },
                        "section": "class Test_get_appsettings(unittest.TestCase):"
                    },
                    "line_group": {
                        "all_lines": [
                            {
                                "content": "        self.assertEqual(result['foo'], 'baz')",
                                "type": "context"
                            },
                            {
                                "content": "",
                                "type": "context"
                            },
                            {
                                "content": "class Test_setup_logging(unittest.TestCase):",
                                "type": "context"
                            },
                            {
                                "content": "    def _callFUT(self, config_file):",
                                "type": "deleted"
                            },
                            {
                                "content": "    def _callFUT(self, config_file, global_conf=None):",
                                "type": "added"
                            },
                            {
                                "content": "        from pyramid.paster import setup_logging",
                                "type": "context"
                            },
                            {
                                "content": "        dummy_cp = DummyConfigParserModule",
                                "type": "context"
                            },
                            {
                                "content": "        return setup_logging(config_file, self.fileConfig, dummy_cp)",
                                "type": "deleted"
                            },
                            {
                                "content": "        return setup_logging(",
                                "type": "added"
                            },
                            {
                                "content": "            config_uri=config_file,",
                                "type": "added"
                            },
                            {
                                "content": "            global_conf=global_conf,",
                                "type": "added"
                            },
                            {
                                "content": "            fileConfig=self.fileConfig,",
                                "type": "added"
                            },
                            {
                                "content": "            configparser=dummy_cp,",
                                "type": "added"
                            },
                            {
                                "content": "            )",
                                "type": "added"
                            },
                            {
                                "content": "",
                                "type": "context"
                            },
                            {
                                "content": "    def test_it(self):",
                                "type": "deleted"
                            },
                            {
                                "content": "    def test_it_no_global_conf(self):",
                                "type": "added"
                            },
                            {
                                "content": "        config_file, dict = self._callFUT('/abc')",
                                "type": "context"
                            },
                            {
                                "content": "        # os.path.abspath is a sop to Windows",
                                "type": "context"
                            },
                            {
                                "content": "        self.assertEqual(config_file, os.path.abspath('/abc'))",
                                "type": "context"
                            },
                            {
                                "content": "        self.assertEqual(dict['__file__'], os.path.abspath('/abc'))",
                                "type": "context"
                            },
                            {
                                "content": "        self.assertEqual(dict['here'], os.path.abspath('/'))",
                                "type": "context"
                            },
                            {
                                "content": "",
                                "type": "context"
                            },
                            {
                                "content": "    def test_it_global_conf_empty(self):",
                                "type": "added"
                            },
                            {
                                "content": "        config_file, dict = self._callFUT('/abc', global_conf={})",
                                "type": "added"
                            },
                            {
                                "content": "        # os.path.abspath is a sop to Windows",
                                "type": "added"
                            },
                            {
                                "content": "        self.assertEqual(config_file, os.path.abspath('/abc'))",
                                "type": "added"
                            },
                            {
                                "content": "        self.assertEqual(dict['__file__'], os.path.abspath('/abc'))",
                                "type": "added"
                            },
                            {
                                "content": "        self.assertEqual(dict['here'], os.path.abspath('/'))",
                                "type": "added"
                            },
                            {
                                "content": "",
                                "type": "added"
                            },
                            {
                                "content": "    def test_it_global_conf_not_empty(self):",
                                "type": "added"
                            },
                            {
                                "content": "        config_file, dict = self._callFUT('/abc', global_conf={'key': 'val'})",
                                "type": "added"
                            },
                            {
                                "content": "        # os.path.abspath is a sop to Windows",
                                "type": "added"
                            },
                            {
                                "content": "        self.assertEqual(config_file, os.path.abspath('/abc'))",
                                "type": "added"
                            },
                            {
                                "content": "        self.assertEqual(dict['__file__'], os.path.abspath('/abc'))",
                                "type": "added"
                            },
                            {
                                "content": "        self.assertEqual(dict['here'], os.path.abspath('/'))",
                                "type": "added"
                            },
                            {
                                "content": "        self.assertEqual(dict['key'], 'val')",
                                "type": "added"
                            },
                            {
                                "content": "",
                                "type": "added"
                            },
                            {
                                "content": "    def fileConfig(self, config_file, dict):",
                                "type": "context"
                            },
                            {
                                "content": "        return config_file, dict",
                                "type": "context"
                            },
                            {
                                "content": "",
                                "type": "context"
                            },
                            {
                                "content": "",
                                "type": "context"
                            }
                        ]
                    },
                    "modified_entities": [
                        {
                            "file_name": "pyramid/tests/test_paster.py",
                            "type": "method",
                            "name": "Test_setup_logging._callFUT",
                            "content": "class Test_setup_logging(unittest.TestCase):\n    def _callFUT(self, config_file):\n        from pyramid.paster import setup_logging\n        dummy_cp = DummyConfigParserModule\n        return setup_logging(config_file, self.fileConfig, dummy_cp)\n\n    def test_it(self):\n        config_file, dict = self._callFUT('/abc')\n        # os.path.abspath is a sop to Windows\n        self.assertEqual(config_file, os.path.abspath('/abc'))\n        self.assertEqual(dict['__file__'], os.path.abspath('/abc'))\n        self.assertEqual(dict['here'], os.path.abspath('/'))\n\n    def fileConfig(self, config_file, dict):\n        return config_file, dict",
                            "ast_type_str": "ClassDef",
                            "start_lineno": 108,
                            "end_lineno": 111,
                            "parent": {
                                "file_name": "pyramid/tests/test_paster.py",
                                "type": "class",
                                "name": "Test_setup_logging",
                                "content": "class Test_setup_logging(unittest.TestCase):\n    def _callFUT(self, config_file):\n        from pyramid.paster import setup_logging\n        dummy_cp = DummyConfigParserModule\n        return setup_logging(config_file, self.fileConfig, dummy_cp)\n\n    def test_it(self):\n        config_file, dict = self._callFUT('/abc')\n        # os.path.abspath is a sop to Windows\n        self.assertEqual(config_file, os.path.abspath('/abc'))\n        self.assertEqual(dict['__file__'], os.path.abspath('/abc'))\n        self.assertEqual(dict['here'], os.path.abspath('/'))\n\n    def fileConfig(self, config_file, dict):\n        return config_file, dict",
                                "ast_type_str": "ClassDef",
                                "start_lineno": 107,
                                "end_lineno": 121,
                                "parent": null
                            }
                        },
                        {
                            "file_name": "pyramid/tests/test_paster.py",
                            "type": "class",
                            "name": "Test_setup_logging",
                            "content": "class Test_setup_logging(unittest.TestCase):\n    def _callFUT(self, config_file):\n        from pyramid.paster import setup_logging\n        dummy_cp = DummyConfigParserModule\n        return setup_logging(config_file, self.fileConfig, dummy_cp)\n\n    def test_it(self):\n        config_file, dict = self._callFUT('/abc')\n        # os.path.abspath is a sop to Windows\n        self.assertEqual(config_file, os.path.abspath('/abc'))\n        self.assertEqual(dict['__file__'], os.path.abspath('/abc'))\n        self.assertEqual(dict['here'], os.path.abspath('/'))\n\n    def fileConfig(self, config_file, dict):\n        return config_file, dict",
                            "ast_type_str": "ClassDef",
                            "start_lineno": 107,
                            "end_lineno": 121,
                            "parent": null
                        }
                    ],
                    "added_entities": [
                        {
                            "file_name": "pyramid/tests/test_paster.py",
                            "type": "method",
                            "name": "Test_setup_logging.test_it_global_conf_not_empty",
                            "content": "class Test_setup_logging(unittest.TestCase):\n    def _callFUT(self, config_file, global_conf=None):\n        from pyramid.paster import setup_logging\n        dummy_cp = DummyConfigParserModule\n        return setup_logging(\n            config_uri=config_file,\n            global_conf=global_conf,\n            fileConfig=self.fileConfig,\n            configparser=dummy_cp,\n            )\n\n    def test_it_no_global_conf(self):\n        config_file, dict = self._callFUT('/abc')\n        # os.path.abspath is a sop to Windows\n        self.assertEqual(config_file, os.path.abspath('/abc'))\n        self.assertEqual(dict['__file__'], os.path.abspath('/abc'))\n        self.assertEqual(dict['here'], os.path.abspath('/'))\n\n    def test_it_global_conf_empty(self):\n        config_file, dict = self._callFUT('/abc', global_conf={})\n        # os.path.abspath is a sop to Windows\n        self.assertEqual(config_file, os.path.abspath('/abc'))\n        self.assertEqual(dict['__file__'], os.path.abspath('/abc'))\n        self.assertEqual(dict['here'], os.path.abspath('/'))\n\n    def test_it_global_conf_not_empty(self):\n        config_file, dict = self._callFUT('/abc', global_conf={'key': 'val'})\n        # os.path.abspath is a sop to Windows\n        self.assertEqual(config_file, os.path.abspath('/abc'))\n        self.assertEqual(dict['__file__'], os.path.abspath('/abc'))\n        self.assertEqual(dict['here'], os.path.abspath('/'))\n        self.assertEqual(dict['key'], 'val')\n\n    def fileConfig(self, config_file, dict):\n        return config_file, dict",
                            "ast_type_str": "ClassDef",
                            "start_lineno": 132,
                            "end_lineno": 138,
                            "parent": {
                                "file_name": "pyramid/tests/test_paster.py",
                                "type": "class",
                                "name": "Test_setup_logging",
                                "content": "class Test_setup_logging(unittest.TestCase):\n    def _callFUT(self, config_file, global_conf=None):\n        from pyramid.paster import setup_logging\n        dummy_cp = DummyConfigParserModule\n        return setup_logging(\n            config_uri=config_file,\n            global_conf=global_conf,\n            fileConfig=self.fileConfig,\n            configparser=dummy_cp,\n            )\n\n    def test_it_no_global_conf(self):\n        config_file, dict = self._callFUT('/abc')\n        # os.path.abspath is a sop to Windows\n        self.assertEqual(config_file, os.path.abspath('/abc'))\n        self.assertEqual(dict['__file__'], os.path.abspath('/abc'))\n        self.assertEqual(dict['here'], os.path.abspath('/'))\n\n    def test_it_global_conf_empty(self):\n        config_file, dict = self._callFUT('/abc', global_conf={})\n        # os.path.abspath is a sop to Windows\n        self.assertEqual(config_file, os.path.abspath('/abc'))\n        self.assertEqual(dict['__file__'], os.path.abspath('/abc'))\n        self.assertEqual(dict['here'], os.path.abspath('/'))\n\n    def test_it_global_conf_not_empty(self):\n        config_file, dict = self._callFUT('/abc', global_conf={'key': 'val'})\n        # os.path.abspath is a sop to Windows\n        self.assertEqual(config_file, os.path.abspath('/abc'))\n        self.assertEqual(dict['__file__'], os.path.abspath('/abc'))\n        self.assertEqual(dict['here'], os.path.abspath('/'))\n        self.assertEqual(dict['key'], 'val')\n\n    def fileConfig(self, config_file, dict):\n        return config_file, dict",
                                "ast_type_str": "ClassDef",
                                "start_lineno": 107,
                                "end_lineno": 141,
                                "parent": null
                            }
                        },
                        {
                            "file_name": "pyramid/tests/test_paster.py",
                            "type": "method",
                            "name": "Test_setup_logging.test_it_global_conf_empty",
                            "content": "class Test_setup_logging(unittest.TestCase):\n    def _callFUT(self, config_file, global_conf=None):\n        from pyramid.paster import setup_logging\n        dummy_cp = DummyConfigParserModule\n        return setup_logging(\n            config_uri=config_file,\n            global_conf=global_conf,\n            fileConfig=self.fileConfig,\n            configparser=dummy_cp,\n            )\n\n    def test_it_no_global_conf(self):\n        config_file, dict = self._callFUT('/abc')\n        # os.path.abspath is a sop to Windows\n        self.assertEqual(config_file, os.path.abspath('/abc'))\n        self.assertEqual(dict['__file__'], os.path.abspath('/abc'))\n        self.assertEqual(dict['here'], os.path.abspath('/'))\n\n    def test_it_global_conf_empty(self):\n        config_file, dict = self._callFUT('/abc', global_conf={})\n        # os.path.abspath is a sop to Windows\n        self.assertEqual(config_file, os.path.abspath('/abc'))\n        self.assertEqual(dict['__file__'], os.path.abspath('/abc'))\n        self.assertEqual(dict['here'], os.path.abspath('/'))\n\n    def test_it_global_conf_not_empty(self):\n        config_file, dict = self._callFUT('/abc', global_conf={'key': 'val'})\n        # os.path.abspath is a sop to Windows\n        self.assertEqual(config_file, os.path.abspath('/abc'))\n        self.assertEqual(dict['__file__'], os.path.abspath('/abc'))\n        self.assertEqual(dict['here'], os.path.abspath('/'))\n        self.assertEqual(dict['key'], 'val')\n\n    def fileConfig(self, config_file, dict):\n        return config_file, dict",
                            "ast_type_str": "ClassDef",
                            "start_lineno": 125,
                            "end_lineno": 130,
                            "parent": {
                                "file_name": "pyramid/tests/test_paster.py",
                                "type": "class",
                                "name": "Test_setup_logging",
                                "content": "class Test_setup_logging(unittest.TestCase):\n    def _callFUT(self, config_file, global_conf=None):\n        from pyramid.paster import setup_logging\n        dummy_cp = DummyConfigParserModule\n        return setup_logging(\n            config_uri=config_file,\n            global_conf=global_conf,\n            fileConfig=self.fileConfig,\n            configparser=dummy_cp,\n            )\n\n    def test_it_no_global_conf(self):\n        config_file, dict = self._callFUT('/abc')\n        # os.path.abspath is a sop to Windows\n        self.assertEqual(config_file, os.path.abspath('/abc'))\n        self.assertEqual(dict['__file__'], os.path.abspath('/abc'))\n        self.assertEqual(dict['here'], os.path.abspath('/'))\n\n    def test_it_global_conf_empty(self):\n        config_file, dict = self._callFUT('/abc', global_conf={})\n        # os.path.abspath is a sop to Windows\n        self.assertEqual(config_file, os.path.abspath('/abc'))\n        self.assertEqual(dict['__file__'], os.path.abspath('/abc'))\n        self.assertEqual(dict['here'], os.path.abspath('/'))\n\n    def test_it_global_conf_not_empty(self):\n        config_file, dict = self._callFUT('/abc', global_conf={'key': 'val'})\n        # os.path.abspath is a sop to Windows\n        self.assertEqual(config_file, os.path.abspath('/abc'))\n        self.assertEqual(dict['__file__'], os.path.abspath('/abc'))\n        self.assertEqual(dict['here'], os.path.abspath('/'))\n        self.assertEqual(dict['key'], 'val')\n\n    def fileConfig(self, config_file, dict):\n        return config_file, dict",
                                "ast_type_str": "ClassDef",
                                "start_lineno": 107,
                                "end_lineno": 141,
                                "parent": null
                            }
                        },
                        {
                            "file_name": "pyramid/tests/test_paster.py",
                            "type": "method",
                            "name": "Test_setup_logging.test_it_no_global_conf",
                            "content": "class Test_setup_logging(unittest.TestCase):\n    def _callFUT(self, config_file, global_conf=None):\n        from pyramid.paster import setup_logging\n        dummy_cp = DummyConfigParserModule\n        return setup_logging(\n            config_uri=config_file,\n            global_conf=global_conf,\n            fileConfig=self.fileConfig,\n            configparser=dummy_cp,\n            )\n\n    def test_it_no_global_conf(self):\n        config_file, dict = self._callFUT('/abc')\n        # os.path.abspath is a sop to Windows\n        self.assertEqual(config_file, os.path.abspath('/abc'))\n        self.assertEqual(dict['__file__'], os.path.abspath('/abc'))\n        self.assertEqual(dict['here'], os.path.abspath('/'))\n\n    def test_it_global_conf_empty(self):\n        config_file, dict = self._callFUT('/abc', global_conf={})\n        # os.path.abspath is a sop to Windows\n        self.assertEqual(config_file, os.path.abspath('/abc'))\n        self.assertEqual(dict['__file__'], os.path.abspath('/abc'))\n        self.assertEqual(dict['here'], os.path.abspath('/'))\n\n    def test_it_global_conf_not_empty(self):\n        config_file, dict = self._callFUT('/abc', global_conf={'key': 'val'})\n        # os.path.abspath is a sop to Windows\n        self.assertEqual(config_file, os.path.abspath('/abc'))\n        self.assertEqual(dict['__file__'], os.path.abspath('/abc'))\n        self.assertEqual(dict['here'], os.path.abspath('/'))\n        self.assertEqual(dict['key'], 'val')\n\n    def fileConfig(self, config_file, dict):\n        return config_file, dict",
                            "ast_type_str": "ClassDef",
                            "start_lineno": 118,
                            "end_lineno": 123,
                            "parent": {
                                "file_name": "pyramid/tests/test_paster.py",
                                "type": "class",
                                "name": "Test_setup_logging",
                                "content": "class Test_setup_logging(unittest.TestCase):\n    def _callFUT(self, config_file, global_conf=None):\n        from pyramid.paster import setup_logging\n        dummy_cp = DummyConfigParserModule\n        return setup_logging(\n            config_uri=config_file,\n            global_conf=global_conf,\n            fileConfig=self.fileConfig,\n            configparser=dummy_cp,\n            )\n\n    def test_it_no_global_conf(self):\n        config_file, dict = self._callFUT('/abc')\n        # os.path.abspath is a sop to Windows\n        self.assertEqual(config_file, os.path.abspath('/abc'))\n        self.assertEqual(dict['__file__'], os.path.abspath('/abc'))\n        self.assertEqual(dict['here'], os.path.abspath('/'))\n\n    def test_it_global_conf_empty(self):\n        config_file, dict = self._callFUT('/abc', global_conf={})\n        # os.path.abspath is a sop to Windows\n        self.assertEqual(config_file, os.path.abspath('/abc'))\n        self.assertEqual(dict['__file__'], os.path.abspath('/abc'))\n        self.assertEqual(dict['here'], os.path.abspath('/'))\n\n    def test_it_global_conf_not_empty(self):\n        config_file, dict = self._callFUT('/abc', global_conf={'key': 'val'})\n        # os.path.abspath is a sop to Windows\n        self.assertEqual(config_file, os.path.abspath('/abc'))\n        self.assertEqual(dict['__file__'], os.path.abspath('/abc'))\n        self.assertEqual(dict['here'], os.path.abspath('/'))\n        self.assertEqual(dict['key'], 'val')\n\n    def fileConfig(self, config_file, dict):\n        return config_file, dict",
                                "ast_type_str": "ClassDef",
                                "start_lineno": 107,
                                "end_lineno": 141,
                                "parent": null
                            }
                        }
                    ],
                    "deleted_entities": [
                        {
                            "file_name": "pyramid/tests/test_paster.py",
                            "type": "method",
                            "name": "Test_setup_logging.test_it",
                            "content": "class Test_setup_logging(unittest.TestCase):\n    def _callFUT(self, config_file):\n        from pyramid.paster import setup_logging\n        dummy_cp = DummyConfigParserModule\n        return setup_logging(config_file, self.fileConfig, dummy_cp)\n\n    def test_it(self):\n        config_file, dict = self._callFUT('/abc')\n        # os.path.abspath is a sop to Windows\n        self.assertEqual(config_file, os.path.abspath('/abc'))\n        self.assertEqual(dict['__file__'], os.path.abspath('/abc'))\n        self.assertEqual(dict['here'], os.path.abspath('/'))\n\n    def fileConfig(self, config_file, dict):\n        return config_file, dict",
                            "ast_type_str": "ClassDef",
                            "start_lineno": 113,
                            "end_lineno": 118,
                            "parent": {
                                "file_name": "pyramid/tests/test_paster.py",
                                "type": "class",
                                "name": "Test_setup_logging",
                                "content": "class Test_setup_logging(unittest.TestCase):\n    def _callFUT(self, config_file):\n        from pyramid.paster import setup_logging\n        dummy_cp = DummyConfigParserModule\n        return setup_logging(config_file, self.fileConfig, dummy_cp)\n\n    def test_it(self):\n        config_file, dict = self._callFUT('/abc')\n        # os.path.abspath is a sop to Windows\n        self.assertEqual(config_file, os.path.abspath('/abc'))\n        self.assertEqual(dict['__file__'], os.path.abspath('/abc'))\n        self.assertEqual(dict['here'], os.path.abspath('/'))\n\n    def fileConfig(self, config_file, dict):\n        return config_file, dict",
                                "ast_type_str": "ClassDef",
                                "start_lineno": 107,
                                "end_lineno": 121,
                                "parent": null
                            }
                        }
                    ]
                }
            ]
        }
    ],
    "old_commit_hash": "d6ee2312b8e3b155452682d2400fac7c773d3a9e^",
    "new_commit_hash": "d6ee2312b8e3b155452682d2400fac7c773d3a9e",
    "commit_message": "Merge pull request #2399 from msabramo/logging_global_conf\n\nPass vars to logging.config.fileConfig",
    "commit_date": "2016-04-06T13:18:34-05:00",
    "metadata": {}
}
{
    "repo_name": "pyramid",
    "new_commit_hash": "d6ee2312b8e3b155452682d2400fac7c773d3a9e",
    "test_file_codes": [
        "import os\nimport unittest\n\nhere = os.path.dirname(__file__)\n\nclass Test_get_app(unittest.TestCase):\n    def _callFUT(self, config_file, section_name, **kw):\n        from pyramid.paster import get_app\n        return get_app(config_file, section_name, **kw)\n\n    def test_it(self):\n        app = DummyApp()\n        loadapp = DummyLoadWSGI(app)\n        result = self._callFUT('/foo/bar/myapp.ini', 'myapp', loadapp=loadapp)\n        self.assertEqual(loadapp.config_name, 'config:/foo/bar/myapp.ini')\n        self.assertEqual(loadapp.section_name, 'myapp')\n        self.assertEqual(loadapp.relative_to, os.getcwd())\n        self.assertEqual(result, app)\n\n    def test_it_with_hash(self):\n        app = DummyApp()\n        loadapp = DummyLoadWSGI(app)\n        result = self._callFUT(\n            '/foo/bar/myapp.ini#myapp', None, loadapp=loadapp\n            )\n        self.assertEqual(loadapp.config_name, 'config:/foo/bar/myapp.ini')\n        self.assertEqual(loadapp.section_name, 'myapp')\n        self.assertEqual(loadapp.relative_to, os.getcwd())\n        self.assertEqual(result, app)\n\n    def test_it_with_hash_and_name_override(self):\n        app = DummyApp()\n        loadapp = DummyLoadWSGI(app)\n        result = self._callFUT(\n            '/foo/bar/myapp.ini#myapp', 'yourapp', loadapp=loadapp\n            )\n        self.assertEqual(loadapp.config_name, 'config:/foo/bar/myapp.ini')\n        self.assertEqual(loadapp.section_name, 'yourapp')\n        self.assertEqual(loadapp.relative_to, os.getcwd())\n        self.assertEqual(result, app)\n\n    def test_it_with_options(self):\n        app = DummyApp()\n        loadapp = DummyLoadWSGI(app)\n        options = {'a':1}\n        result = self._callFUT(\n            '/foo/bar/myapp.ini#myapp',\n            'yourapp',\n            loadapp=loadapp,\n            options=options,\n            )\n        self.assertEqual(loadapp.config_name, 'config:/foo/bar/myapp.ini')\n        self.assertEqual(loadapp.section_name, 'yourapp')\n        self.assertEqual(loadapp.relative_to, os.getcwd())\n        self.assertEqual(loadapp.kw, {'global_conf':options})\n        self.assertEqual(result, app)\n\n    def test_it_with_dummyapp_requiring_options(self):\n        options = {'bar': 'baz'}\n        app = self._callFUT(\n            os.path.join(here, 'fixtures', 'dummy.ini'),\n            'myapp', options=options)\n        self.assertEqual(app.settings['foo'], 'baz')\n\nclass Test_get_appsettings(unittest.TestCase):\n    def _callFUT(self, config_file, section_name, **kw):\n        from pyramid.paster import get_appsettings\n        return get_appsettings(config_file, section_name, **kw)\n\n    def test_it(self):\n        values = {'a':1}\n        appconfig = DummyLoadWSGI(values)\n        result = self._callFUT('/foo/bar/myapp.ini', 'myapp',\n                               appconfig=appconfig)\n        self.assertEqual(appconfig.config_name, 'config:/foo/bar/myapp.ini')\n        self.assertEqual(appconfig.section_name, 'myapp')\n        self.assertEqual(appconfig.relative_to, os.getcwd())\n        self.assertEqual(result, values)\n\n    def test_it_with_hash(self):\n        values = {'a':1}\n        appconfig = DummyLoadWSGI(values)\n        result = self._callFUT('/foo/bar/myapp.ini#myapp', None,\n                               appconfig=appconfig)\n        self.assertEqual(appconfig.config_name, 'config:/foo/bar/myapp.ini')\n        self.assertEqual(appconfig.section_name, 'myapp')\n        self.assertEqual(appconfig.relative_to, os.getcwd())\n        self.assertEqual(result, values)\n\n    def test_it_with_hash_and_name_override(self):\n        values = {'a':1}\n        appconfig = DummyLoadWSGI(values)\n        result = self._callFUT('/foo/bar/myapp.ini#myapp', 'yourapp',\n                               appconfig=appconfig)\n        self.assertEqual(appconfig.config_name, 'config:/foo/bar/myapp.ini')\n        self.assertEqual(appconfig.section_name, 'yourapp')\n        self.assertEqual(appconfig.relative_to, os.getcwd())\n        self.assertEqual(result, values)\n\n    def test_it_with_dummyapp_requiring_options(self):\n        options = {'bar': 'baz'}\n        result = self._callFUT(\n            os.path.join(here, 'fixtures', 'dummy.ini'),\n            'myapp', options=options)\n        self.assertEqual(result['foo'], 'baz')\n\nclass Test_setup_logging(unittest.TestCase):\n    def _callFUT(self, config_file, global_conf=None):\n        from pyramid.paster import setup_logging\n        dummy_cp = DummyConfigParserModule\n        return setup_logging(\n            config_uri=config_file,\n            global_conf=global_conf,\n            fileConfig=self.fileConfig,\n            configparser=dummy_cp,\n            )\n\n    def test_it_no_global_conf(self):\n        config_file, dict = self._callFUT('/abc')\n        # os.path.abspath is a sop to Windows\n        self.assertEqual(config_file, os.path.abspath('/abc'))\n        self.assertEqual(dict['__file__'], os.path.abspath('/abc'))\n        self.assertEqual(dict['here'], os.path.abspath('/'))\n\n    def test_it_global_conf_empty(self):\n        config_file, dict = self._callFUT('/abc', global_conf={})\n        # os.path.abspath is a sop to Windows\n        self.assertEqual(config_file, os.path.abspath('/abc'))\n        self.assertEqual(dict['__file__'], os.path.abspath('/abc'))\n        self.assertEqual(dict['here'], os.path.abspath('/'))\n\n    def test_it_global_conf_not_empty(self):\n        config_file, dict = self._callFUT('/abc', global_conf={'key': 'val'})\n        # os.path.abspath is a sop to Windows\n        self.assertEqual(config_file, os.path.abspath('/abc'))\n        self.assertEqual(dict['__file__'], os.path.abspath('/abc'))\n        self.assertEqual(dict['here'], os.path.abspath('/'))\n        self.assertEqual(dict['key'], 'val')\n\n    def fileConfig(self, config_file, dict):\n        return config_file, dict\n\nclass Test_bootstrap(unittest.TestCase):\n    def _callFUT(self, config_uri, request=None):\n        from pyramid.paster import bootstrap\n        return bootstrap(config_uri, request)\n\n    def setUp(self):\n        import pyramid.paster\n        self.original_get_app = pyramid.paster.get_app\n        self.original_prepare = pyramid.paster.prepare\n        self.app = app = DummyApp()\n        self.root = root = Dummy()\n\n        class DummyGetApp(object):\n            def __call__(self, *a, **kw):\n                self.a = a\n                self.kw = kw\n                return app\n        self.get_app = pyramid.paster.get_app = DummyGetApp()\n\n        class DummyPrepare(object):\n            def __call__(self, *a, **kw):\n                self.a = a\n                self.kw = kw\n                return {'root':root, 'closer':lambda: None}\n        self.getroot = pyramid.paster.prepare = DummyPrepare()\n\n    def tearDown(self):\n        import pyramid.paster\n        pyramid.paster.get_app = self.original_get_app\n        pyramid.paster.prepare = self.original_prepare\n\n    def test_it_request_with_registry(self):\n        request = DummyRequest({})\n        request.registry = dummy_registry\n        result = self._callFUT('/foo/bar/myapp.ini', request)\n        self.assertEqual(result['app'], self.app)\n        self.assertEqual(result['root'], self.root)\n        self.assertTrue('closer' in result)\n\nclass Dummy:\n    pass\n\nclass DummyRegistry(object):\n    settings = {}\n\ndummy_registry = DummyRegistry()\n\nclass DummyLoadWSGI:\n    def __init__(self, result):\n        self.result = result\n\n    def __call__(self, config_name, name=None, relative_to=None, **kw):\n        self.config_name = config_name\n        self.section_name = name\n        self.relative_to = relative_to\n        self.kw = kw\n        return self.result\n\nclass DummyApp:\n    def __init__(self):\n        self.registry = dummy_registry\n\ndef make_dummyapp(global_conf, **settings):\n    app = DummyApp()\n    app.settings = settings\n    app.global_conf = global_conf\n    return app\n\nclass DummyRequest:\n    application_url = 'http://example.com:5432'\n    script_name = ''\n    def __init__(self, environ):\n        self.environ = environ\n        self.matchdict = {}\n\nclass DummyConfigParser(object):\n    def read(self, x):\n        pass\n\n    def has_section(self, name):\n        return True\n\nclass DummyConfigParserModule(object):\n    ConfigParser = DummyConfigParser\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 9 packages in 666ms\nPrepared 1 package in 811ms\nInstalled 9 packages in 51ms\n + pastedeploy==3.1.0\n + pyramid==1.7.dev0 (from file:///home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_d6ee2312b8e3b155452682d2400fac7c773d3a9e)\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 + zope-deprecation==5.0\n + zope-interface==7.2\nResolved 19 packages in 57ms\nInstalled 10 packages in 37ms\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 7ms\nInstalled 12 packages in 12ms\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_d6ee2312b8e3b155452682d2400fac7c773d3a9e\ncollected 961 items\n\nr2e_tests/test_1.py .............                                        [  1%]\nr2e_tests/test_config/test_adapters.py .FF..............F...             [  3%]\nr2e_tests/test_config/test_assets.py ....F.F...F...FF.FF................ [  7%]\n.....................................F.F................................ [ 14%]\n                                                                         [ 14%]\nr2e_tests/test_config/test_factories.py .....................            [ 16%]\nr2e_tests/test_config/test_i18n.py FFF.FF...                             [ 17%]\nr2e_tests/test_config/test_init.py ..................................... [ 21%]\n...F..F.......F.............F...........F.....................FF...FFF.. [ 29%]\n......................                                                   [ 31%]\nr2e_tests/test_config/test_predicates.py ............................... [ 34%]\n...........................................                              [ 39%]\nr2e_tests/test_config/test_rendering.py ...                              [ 39%]\nr2e_tests/test_config/test_routes.py ........................            [ 41%]\nr2e_tests/test_config/test_security.py ..........                        [ 42%]\nr2e_tests/test_config/test_settings.py ........................          [ 45%]\nr2e_tests/test_config/test_testing.py ............                       [ 46%]\nr2e_tests/test_config/test_tweens.py .................................   [ 50%]\nr2e_tests/test_config/test_util.py ..................................... [ 54%]\n..............                                                           [ 55%]\nr2e_tests/test_config/test_views.py ........................F........... [ 59%]\n........................................................................ [ 66%]\n......FF................................................................ [ 74%]\n...........FF.........F...F....F........................................ [ 81%]\n......................F.......F                                          [ 84%]\nr2e_tests/test_scripts/test_common.py ...                                [ 85%]\nr2e_tests/test_scripts/test_pcreate.py ....................              [ 87%]\nr2e_tests/test_scripts/test_pdistreport.py ..                            [ 87%]\nr2e_tests/test_scripts/test_prequest.py F.FFF.FFFFFF.F.FFF.              [ 89%]\nr2e_tests/test_scripts/test_proutes.py ...FFF....FFFF.F.FF....F..FF.     [ 92%]\nr2e_tests/test_scripts/test_pserve.py ............................       [ 95%]\nr2e_tests/test_scripts/test_pshell.py ................                   [ 97%]\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:280: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = <Registry r2e_tests.test_config>\nobjects = (<r2e_tests.test_config.test_adapters.DummyIface object at 0x7f3f275b53d0>, <r2e_tests.test_config.test_adapters.DummyIface object at 0x7f3f275b53d0>)\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 0x7f3f275b53d0>, <r2e_tests.test_config.test_adapters.DummyIface object at 0x7f3f275b53d0>), <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:326: 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:237: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = <Registry r2e_tests.test_config>\nobject = <r2e_tests.test_config.test_adapters.DummyIface object at 0x7f3f266422b0>\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 0x7f3f266422b0>, <InterfaceClass pyramid.interfaces.ITraverser>, '')\n\n.venv/lib/python3.8/site-packages/zope/interface/registry.py:368: ComponentLookupError\n___ TestAssetsConfiguratorMixin.test_override_asset_directory_with_directory ___\n\nself = <r2e_tests.test_config.test_assets.TestAssetsConfiguratorMixin testMethod=test_override_asset_directory_with_directory>\n\n    def test_override_asset_directory_with_directory(self):\n        from pyramid.config.assets import PackageAssetSource\n        config = self._makeOne(autocommit=True)\n        override = DummyUnderOverride()\n        config.override_asset(\n            'pyramid.tests.test_config.pkgs.asset:templates/',\n            'pyramid.tests.test_config.pkgs.asset.subpackage:templates/',\n            _override=override)\n        from pyramid.tests.test_config.pkgs import asset\n        from pyramid.tests.test_config.pkgs.asset import subpackage\n        self.assertEqual(override.package, asset)\n        self.assertEqual(override.path, 'templates/')\n        source = override.source\n        self.assertTrue(isinstance(source, PackageAssetSource))\n        self.assertEqual(source.package, subpackage)\n        self.assertEqual(source.prefix, 'templates/')\n    \n        resource_name = 'bar.pt'\n        expected = os.path.join(here, 'pkgs', 'asset',\n                                'subpackage', 'templates', 'bar.pt')\n>       self.assertEqual(override.source.get_filename(resource_name),\n                         expected)\nE       AssertionError: '/hom[90 chars]3a9e/pyramid/tests/test_config/pkgs/asset/subp[19 chars]r.pt' != '/hom[90 chars]3a9e/r2e_tests/test_config/pkgs/asset/subpacka[15 chars]r.pt'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_d6ee2312b8e3b155452682d2400fac7c773d3a9e/pyramid/tests/test_config/pkgs/asset/subpackage/templates/bar.pt\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_d6ee2312b8e3b155452682d2400fac7c773d3a9e/r2e_tests/test_config/pkgs/asset/subpackage/templates/bar.pt\nE       ?                                                                                                     ^^^\n\nr2e_tests/test_config/test_assets.py:106: AssertionError\n____ TestAssetsConfiguratorMixin.test_override_asset_directory_with_package ____\n\nself = <r2e_tests.test_config.test_assets.TestAssetsConfiguratorMixin testMethod=test_override_asset_directory_with_package>\n\n    def test_override_asset_directory_with_package(self):\n        from pyramid.config.assets import PackageAssetSource\n        config = self._makeOne(autocommit=True)\n        override = DummyUnderOverride()\n        config.override_asset(\n            'pyramid.tests.test_config.pkgs.asset:templates/',\n            'pyramid.tests.test_config.pkgs.asset.subpackage',\n            _override=override)\n        from pyramid.tests.test_config.pkgs import asset\n        from pyramid.tests.test_config.pkgs.asset import subpackage\n        self.assertEqual(override.package, asset)\n        self.assertEqual(override.path, 'templates/')\n        source = override.source\n        self.assertTrue(isinstance(source, PackageAssetSource))\n        self.assertEqual(source.package, subpackage)\n        self.assertEqual(source.prefix, '')\n    \n        resource_name = 'templates/bar.pt'\n        expected = os.path.join(here, 'pkgs', 'asset',\n                                'subpackage', 'templates', 'bar.pt')\n>       self.assertEqual(override.source.get_filename(resource_name),\n                         expected)\nE       AssertionError: '/hom[90 chars]3a9e/pyramid/tests/test_config/pkgs/asset/subp[19 chars]r.pt' != '/hom[90 chars]3a9e/r2e_tests/test_config/pkgs/asset/subpacka[15 chars]r.pt'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_d6ee2312b8e3b155452682d2400fac7c773d3a9e/pyramid/tests/test_config/pkgs/asset/subpackage/templates/bar.pt\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_d6ee2312b8e3b155452682d2400fac7c773d3a9e/r2e_tests/test_config/pkgs/asset/subpackage/templates/bar.pt\nE       ?                                                                                                     ^^^\n\nr2e_tests/test_config/test_assets.py:129: AssertionError\n________ TestAssetsConfiguratorMixin.test_override_asset_file_with_file ________\n\nself = <r2e_tests.test_config.test_assets.TestAssetsConfiguratorMixin testMethod=test_override_asset_file_with_file>\n\n    def test_override_asset_file_with_file(self):\n        from pyramid.config.assets import PackageAssetSource\n        config = self._makeOne(autocommit=True)\n        override = DummyUnderOverride()\n        config.override_asset(\n            'pyramid.tests.test_config.pkgs.asset:templates/foo.pt',\n            'pyramid.tests.test_config.pkgs.asset.subpackage:templates/bar.pt',\n            _override=override)\n        from pyramid.tests.test_config.pkgs import asset\n        from pyramid.tests.test_config.pkgs.asset import subpackage\n        self.assertEqual(override.package, asset)\n        self.assertEqual(override.path, 'templates/foo.pt')\n        source = override.source\n        self.assertTrue(isinstance(source, PackageAssetSource))\n        self.assertEqual(source.package, subpackage)\n        self.assertEqual(source.prefix, 'templates/bar.pt')\n    \n        resource_name = ''\n        expected = os.path.join(here, 'pkgs', 'asset',\n                                'subpackage', 'templates', 'bar.pt')\n>       self.assertEqual(override.source.get_filename(resource_name),\n                         expected)\nE       AssertionError: '/hom[90 chars]3a9e/pyramid/tests/test_config/pkgs/asset/subp[19 chars]r.pt' != '/hom[90 chars]3a9e/r2e_tests/test_config/pkgs/asset/subpacka[15 chars]r.pt'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_d6ee2312b8e3b155452682d2400fac7c773d3a9e/pyramid/tests/test_config/pkgs/asset/subpackage/templates/bar.pt\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_d6ee2312b8e3b155452682d2400fac7c773d3a9e/r2e_tests/test_config/pkgs/asset/subpackage/templates/bar.pt\nE       ?                                                                                                     ^^^\n\nr2e_tests/test_config/test_assets.py:60: AssertionError\n____ TestAssetsConfiguratorMixin.test_override_asset_package_with_directory ____\n\nself = <r2e_tests.test_config.test_assets.TestAssetsConfiguratorMixin testMethod=test_override_asset_package_with_directory>\n\n    def test_override_asset_package_with_directory(self):\n        from pyramid.config.assets import PackageAssetSource\n        config = self._makeOne(autocommit=True)\n        override = DummyUnderOverride()\n        config.override_asset(\n            'pyramid.tests.test_config.pkgs.asset',\n            'pyramid.tests.test_config.pkgs.asset.subpackage:templates/',\n            _override=override)\n        from pyramid.tests.test_config.pkgs import asset\n        from pyramid.tests.test_config.pkgs.asset import subpackage\n        self.assertEqual(override.package, asset)\n        self.assertEqual(override.path, '')\n        source = override.source\n        self.assertTrue(isinstance(source, PackageAssetSource))\n        self.assertEqual(source.package, subpackage)\n        self.assertEqual(source.prefix, 'templates/')\n    \n        resource_name = 'bar.pt'\n        expected = os.path.join(here, 'pkgs', 'asset',\n                                'subpackage', 'templates', 'bar.pt')\n>       self.assertEqual(override.source.get_filename(resource_name),\n                         expected)\nE       AssertionError: '/hom[90 chars]3a9e/pyramid/tests/test_config/pkgs/asset/subp[19 chars]r.pt' != '/hom[90 chars]3a9e/r2e_tests/test_config/pkgs/asset/subpacka[15 chars]r.pt'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_d6ee2312b8e3b155452682d2400fac7c773d3a9e/pyramid/tests/test_config/pkgs/asset/subpackage/templates/bar.pt\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_d6ee2312b8e3b155452682d2400fac7c773d3a9e/r2e_tests/test_config/pkgs/asset/subpackage/templates/bar.pt\nE       ?                                                                                                     ^^^\n\nr2e_tests/test_config/test_assets.py:152: AssertionError\n_____ TestAssetsConfiguratorMixin.test_override_asset_package_with_package _____\n\nself = <r2e_tests.test_config.test_assets.TestAssetsConfiguratorMixin testMethod=test_override_asset_package_with_package>\n\n    def test_override_asset_package_with_package(self):\n        from pyramid.config.assets import PackageAssetSource\n        config = self._makeOne(autocommit=True)\n        override = DummyUnderOverride()\n        config.override_asset(\n            'pyramid.tests.test_config.pkgs.asset',\n            'pyramid.tests.test_config.pkgs.asset.subpackage',\n            _override=override)\n        from pyramid.tests.test_config.pkgs import asset\n        from pyramid.tests.test_config.pkgs.asset import subpackage\n        self.assertEqual(override.package, asset)\n        self.assertEqual(override.path, '')\n        source = override.source\n        self.assertTrue(isinstance(source, PackageAssetSource))\n        self.assertEqual(source.package, subpackage)\n        self.assertEqual(source.prefix, '')\n    \n        resource_name = 'templates/bar.pt'\n        expected = os.path.join(here, 'pkgs', 'asset',\n                                'subpackage', 'templates', 'bar.pt')\n>       self.assertEqual(override.source.get_filename(resource_name),\n                         expected)\nE       AssertionError: '/hom[90 chars]3a9e/pyramid/tests/test_config/pkgs/asset/subp[19 chars]r.pt' != '/hom[90 chars]3a9e/r2e_tests/test_config/pkgs/asset/subpacka[15 chars]r.pt'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_d6ee2312b8e3b155452682d2400fac7c773d3a9e/pyramid/tests/test_config/pkgs/asset/subpackage/templates/bar.pt\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_d6ee2312b8e3b155452682d2400fac7c773d3a9e/r2e_tests/test_config/pkgs/asset/subpackage/templates/bar.pt\nE       ?                                                                                                     ^^^\n\nr2e_tests/test_config/test_assets.py:83: AssertionError\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        resource_name = 'test_assets.py'\n        import pyramid.tests.test_config\n        provider = self._makeOne(pyramid.tests.test_config)\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]682d2400fac7c773d3a9e/pyramid/tests/test_config/test_assets.py' != '/hom[73 chars]682d2400fac7c773d3a9e/r2e_tests/test_config/test_assets.py'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_d6ee2312b8e3b155452682d2400fac7c773d3a9e/pyramid/tests/test_config/test_assets.py\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_d6ee2312b8e3b155452682d2400fac7c773d3a9e/r2e_tests/test_config/test_assets.py\nE       ?                                                                                                     ^^^\n\nr2e_tests/test_config/test_assets.py:297: 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        resource_name = 'test_assets.py'\n        import pyramid.tests.test_config\n        provider = self._makeOne(pyramid.tests.test_config)\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]682d2400fac7c773d3a9e/pyramid/tests/test_config/test_assets.py' != '/hom[73 chars]682d2400fac7c773d3a9e/r2e_tests/test_config/test_assets.py'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_d6ee2312b8e3b155452682d2400fac7c773d3a9e/pyramid/tests/test_config/test_assets.py\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_d6ee2312b8e3b155452682d2400fac7c773d3a9e/r2e_tests/test_config/test_assets.py\nE       ?                                                                                                     ^^^\n\nr2e_tests/test_config/test_assets.py:345: AssertionError\n___________________ TestPackageAssetSource.test_get_filename ___________________\n\nself = <r2e_tests.test_config.test_assets.TestPackageAssetSource testMethod=test_get_filename>\n\n    def test_get_filename(self):\n        source = self._makeOne('')\n>       self.assertEqual(source.get_filename('test_assets.py'),\n                         os.path.join(here, 'test_assets.py'))\nE       AssertionError: '/hom[73 chars]682d2400fac7c773d3a9e/pyramid/tests/test_config/test_assets.py' != '/hom[73 chars]682d2400fac7c773d3a9e/r2e_tests/test_config/test_assets.py'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_d6ee2312b8e3b155452682d2400fac7c773d3a9e/pyramid/tests/test_config/test_assets.py\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_d6ee2312b8e3b155452682d2400fac7c773d3a9e/r2e_tests/test_config/test_assets.py\nE       ?                                                                                                     ^^^\n\nr2e_tests/test_config/test_assets.py:716: AssertionError\n_____________ TestPackageAssetSource.test_get_filename_with_prefix _____________\n\nself = <r2e_tests.test_config.test_assets.TestPackageAssetSource testMethod=test_get_filename_with_prefix>\n\n    def test_get_filename_with_prefix(self):\n        source = self._makeOne('test_assets.py')\n>       self.assertEqual(source.get_filename(''),\n                         os.path.join(here, 'test_assets.py'))\nE       AssertionError: '/hom[73 chars]682d2400fac7c773d3a9e/pyramid/tests/test_config/test_assets.py' != '/hom[73 chars]682d2400fac7c773d3a9e/r2e_tests/test_config/test_assets.py'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_d6ee2312b8e3b155452682d2400fac7c773d3a9e/pyramid/tests/test_config/test_assets.py\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_d6ee2312b8e3b155452682d2400fac7c773d3a9e/r2e_tests/test_config/test_assets.py\nE       ?                                                                                                     ^^^\n\nr2e_tests/test_config/test_assets.py:721: 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:86: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \npyramid/util.py:571: in wrapper\n    result = wrapped(self, *arg, **kw)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = <pyramid.config.Configurator object at 0x7f3f26631d60>\nspecs = ('/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_d6ee2312b8e3b155452682d2400fac7c773d3a9e/r2e_tests/pkgs/localeapp/locale',)\nintrospectables = []\nspec = '/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_d6ee2312b8e3b155452682d2400fac7c773d3a9e/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_d6ee2312b8e3b155452682d2400fac7c773d3a9e/r2e_tests/pkgs/localeapp/locale\" is not a directory\n\npyramid/config/i18n.py:86: 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]5452682d2400fac7c773d3a9e/pyramid/tests/pkgs/localeapp/locale'] != ['/ho[70 chars]5452682d2400fac7c773d3a9e/r2e_tests/pkgs/localeapp/locale']\nE       \nE       First differing element 0:\nE       '/hom[68 chars]55452682d2400fac7c773d3a9e/pyramid/tests/pkgs/localeapp/locale'\nE       '/hom[68 chars]55452682d2400fac7c773d3a9e/r2e_tests/pkgs/localeapp/locale'\nE       \nE       - ['/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_d6ee2312b8e3b155452682d2400fac7c773d3a9e/pyramid/tests/pkgs/localeapp/locale']\nE       ?                                                                                                      -- ^^^^^\nE       \nE       + ['/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_d6ee2312b8e3b155452682d2400fac7c773d3a9e/r2e_tests/pkgs/localeapp/locale']\nE       ?                                                                                                       ^^^\n\nr2e_tests/test_config/test_i18n.py:54: 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]d2400fac7c773d3a9e/pyramid/tests/pkgs/localeapp/locale', 'abc'] != ['/ho[77 chars]d2400fac7c773d3a9e/r2e_tests/pkgs/localeapp/locale', 'abc']\nE       \nE       First differing element 0:\nE       '/hom[68 chars]55452682d2400fac7c773d3a9e/pyramid/tests/pkgs/localeapp/locale'\nE       '/hom[68 chars]55452682d2400fac7c773d3a9e/r2e_tests/pkgs/localeapp/locale'\nE       \nE       - ['/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_d6ee2312b8e3b155452682d2400fac7c773d3a9e/pyramid/tests/pkgs/localeapp/locale',\nE       ?                                                                                                      -- ^^^^^\nE       \nE       + ['/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_d6ee2312b8e3b155452682d2400fac7c773d3a9e/r2e_tests/pkgs/localeapp/locale',\nE       ?                                                                                                       ^^^\nE       \nE          'abc']\n\nr2e_tests/test_config/test_i18n.py:64: 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]3a9e/pyramid/tests/pkgs/localeapp/locale', '/h[130 chars]le2'] != ['/ho[91 chars]3a9e/r2e_tests/pkgs/localeapp/locale', '/home/[122 chars]le2']\nE       \nE       First differing element 0:\nE       '/hom[68 chars]55452682d2400fac7c773d3a9e/pyramid/tests/pkgs/localeapp/locale'\nE       '/hom[68 chars]55452682d2400fac7c773d3a9e/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:71: 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]3a9e/pyramid/tests/pkgs/localeapp/locale3', '/[269 chars]le2'] != ['/ho[91 chars]3a9e/r2e_tests/pkgs/localeapp/locale3', '/home[257 chars]le2']\nE       \nE       First differing element 0:\nE       '/hom[69 chars]5452682d2400fac7c773d3a9e/pyramid/tests/pkgs/localeapp/locale3'\nE       '/hom[69 chars]5452682d2400fac7c773d3a9e/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:80: 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:124: AssertionError\n_____________ ConfiguratorTests.test_include_constant_root_package _____________\n\nself = <r2e_tests.test_config.test_init.ConfiguratorTests testMethod=test_include_constant_root_package>\n\n    def test_include_constant_root_package(self):\n        from pyramid import tests\n        from pyramid.tests import test_config\n        config = self._makeOne(root_package=tests)\n        results = {}\n        def include(config):\n            results['package'] = config.package\n            results['root_package'] = config.root_package\n        config.include(include)\n        self.assertEqual(results['root_package'], tests)\n>       self.assertEqual(results['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_init.py:777: 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:1039: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \npyramid/config/__init__.py:652: in commit\n    self.action_state.execute_actions(introspector=self.introspector)\npyramid/config/__init__.py:1161: in execute_actions\n    action = next(pending_actions, None)\npyramid/config/__init__.py:1119: in resume\n    for a, b in zip_longest(actions, executed_actions):\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nactions = [{'args': (), 'callable': <function ViewsConfiguratorMixin.add_view.<locals>.register at 0x7f3f26682670>, 'discriminat...3f26682b80>, 'discriminator': ('view', None, 'two', None, 'd41d8cd98f00b204e9800998ecf8427e'), 'includepath': (), ...}]\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        def orderandpos(v):\n            n, v = v\n            if not isinstance(v, dict):\n                # old-style tuple action\n                v = expand_action(*v)\n            return (v['order'] or 0, n)\n    \n        sactions = sorted(enumerate(actions), key=orderandpos)\n    \n        def orderonly(v):\n            n, v = v\n            if not isinstance(v, dict):\n                # old-style tuple action\n                v = expand_action(*v)\n            return v['order'] or 0\n    \n        for order, actiongroup in itertools.groupby(sactions, orderonly):\n            # \"order\" is an integer grouping. Actions in a lower order will be\n            # executed before actions in a higher order.  All of the actions in\n            # one grouping will be executed (its callable, if any will be called)\n            # before any of the actions in the next.\n    \n            unique = {}\n            output = []\n    \n            for i, action in actiongroup:\n                # Within an order, actions are executed sequentially based on\n                # original action ordering (\"i\").\n    \n                if not isinstance(action, dict):\n                    # old-style tuple action\n                    action = expand_action(*action)\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                discriminator = undefer(action['discriminator'])\n                action['discriminator'] = discriminator\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                # 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 = (\n                    action['includepath'],\n                    action['info'],\n                    action['discriminator'],\n                    )\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 or  # not a prefix\n                            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, 'd41d8cd98f00b204e9800998ecf8427e')\nE                   Line 4 of file /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_d6ee2312b8e3b155452682d2400fac7c773d3a9e/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_d6ee2312b8e3b155452682d2400fac7c773d3a9e/pyramid/tests/test_config/pkgs/selfscan/__init__.py:\nE                       def abc(request):\nE                 For: ('view', None, 'two', None, 'd41d8cd98f00b204e9800998ecf8427e')\nE                   Line 4 of file /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_d6ee2312b8e3b155452682d2400fac7c773d3a9e/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_d6ee2312b8e3b155452682d2400fac7c773d3a9e/pyramid/tests/test_config/pkgs/selfscan/another.py:\nE                       def two(request):\n\npyramid/config/__init__.py:1297: 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:1048: 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:444: AssertionError\n____ TestConfigurator_add_directive.test_add_directive_with_custom_callable ____\n\nself = <r2e_tests.test_config.test_init.TestConfigurator_add_directive testMethod=test_add_directive_with_custom_callable>\n\n    def test_add_directive_with_custom_callable(self):\n        from pyramid.tests import test_config\n        config = self.config\n        config.add_directive(\n                'dummy_callable', 'pyramid.tests.test_config.dummy_callable')\n        self.assertTrue(hasattr(config, 'dummy_callable'))\n        config.dummy_callable('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:1247: AssertionError\n________ TestConfigurator_add_directive.test_add_directive_with_partial ________\n\nself = <r2e_tests.test_config.test_init.TestConfigurator_add_directive testMethod=test_add_directive_with_partial>\n\n    def test_add_directive_with_partial(self):\n        from pyramid.tests import test_config\n        config = self.config\n        config.add_directive(\n                'dummy_partial', 'pyramid.tests.test_config.dummy_partial')\n        self.assertTrue(hasattr(config, 'dummy_partial'))\n        config.dummy_partial()\n        after = config.action_state\n        action = after.actions[-1]\n        self.assertEqual(action['discriminator'], 'partial')\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:1234: 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:1221: 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:1260: AssertionError\n_________ TestConfigurator__add_predicate.test_factory_as_dotted_name __________\n\nself = <r2e_tests.test_config.test_init.TestConfigurator__add_predicate testMethod=test_factory_as_dotted_name>\n\n    def test_factory_as_dotted_name(self):\n        config = self._makeOne()\n    \n        def _fakeAction(discriminator, callable=None, args=(),\n                        kw=None, order=0, introspectables=(), **extra):\n            self.assertEqual(len(introspectables), 1)\n            self.assertEqual(introspectables[0]['name'], 'testing')\n            self.assertEqual(introspectables[0]['factory'], DummyPredicate)\n    \n        config.action = _fakeAction\n>       config._add_predicate(\n            'route',\n            'testing',\n            'pyramid.tests.test_config.test_init.DummyPredicate'\n            )\n\nr2e_tests/test_config/test_init.py:1324: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \npyramid/config/__init__.py:541: in _add_predicate\n    self.action(discriminator, register, introspectables=(intr,),\nr2e_tests/test_config/test_init.py:1321: in _fakeAction\n    self.assertEqual(introspectables[0]['factory'], DummyPredicate)\nE   AssertionError: <class 'pyramid.tests.test_config.test_init.DummyPredicate'> != <class 'r2e_tests.test_config.test_init.DummyPredicate'>\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]f3f2651ab50>, 'static', 'r2e_tests.test_config:files', {})] != [(<py[39 chars]f3f2651ab50>, 'static', 'pyramid.tests.test_config:files', {})]\nE       \nE       First differing element 0:\nE       (<pyr[37 chars]7f3f2651ab50>, 'static', 'r2e_tests.test_config:files', {})\nE       (<pyr[37 chars]7f3f2651ab50>, 'static', 'pyramid.tests.test_config:files', {})\nE       \nE         [(<pyramid.config.Configurator object at 0x7f3f2651ab50>,\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:1842: 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.introspection = False\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:1143: 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.introspection = False\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:1184: 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:2507: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\ncontext = None, request = None\n\n    def viewresult_to_response(context, request):\n        result = view(context, request)\n        if result.__class__ is Response:  # common case\n            response = result\n        else:\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 '\n                              'from the view callable.')\n                elif isinstance(result, dict):\n                    append = (' You may have forgotten to define a '\n                              'renderer in the view configuration.')\n                else:\n                    append = ''\n    \n                msg = ('Could not convert return value of the view '\n                       'callable %s 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:413: 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:2509: 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:2526: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\ncontext = None, request = None\n\n    def viewresult_to_response(context, request):\n        result = view(context, request)\n        if result.__class__ is Response:  # common case\n            response = result\n        else:\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 '\n                              'from the view callable.')\n                elif isinstance(result, dict):\n                    append = (' You may have forgotten to define a '\n                              'renderer in the view configuration.')\n                else:\n                    append = ''\n    \n                msg = ('Could not convert return value of the view '\n                       'callable %s 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:413: 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:2528: 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:2547: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\ncontext = None, request = None\n\n    def viewresult_to_response(context, request):\n        result = view(context, request)\n        if result.__class__ is Response:  # common case\n            response = result\n        else:\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 '\n                              'from the view callable.')\n                elif isinstance(result, dict):\n                    append = (' You may have forgotten to define a '\n                              'renderer in the view configuration.')\n                else:\n                    append = ''\n    \n                msg = ('Could not convert return value of the view '\n                       'callable %s 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 0x7f3f260d3310> 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:413: 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:2550: 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:2593: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\ncontext = None\nrequest = <r2e_tests.test_config.test_views.DummyRequest object at 0x7f3f2603aa00>\n\n    def viewresult_to_response(context, request):\n        result = view(context, request)\n        if result.__class__ is Response:  # common case\n            response = result\n        else:\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 '\n                              'from the view callable.')\n                elif isinstance(result, dict):\n                    append = (' You may have forgotten to define a '\n                              'renderer in the view configuration.')\n                else:\n                    append = ''\n    \n                msg = ('Could not convert return value of the view '\n                       'callable %s 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:413: 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:2595: 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:2617: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\ncontext = None\nrequest = <r2e_tests.test_config.test_views.DummyRequest object at 0x7f3f26588d60>\n\n    def viewresult_to_response(context, request):\n        result = view(context, request)\n        if result.__class__ is Response:  # common case\n            response = result\n        else:\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 '\n                              'from the view callable.')\n                elif isinstance(result, dict):\n                    append = (' You may have forgotten to define a '\n                              'renderer in the view configuration.')\n                else:\n                    append = ''\n    \n                msg = ('Could not convert return value of the view '\n                       'callable %s 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:413: 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:2619: AssertionError\n_________ TestStaticURLInfo.test_generate_url_cachebust_with_overrides _________\n\nself = <r2e_tests.test_config.test_views.TestStaticURLInfo testMethod=test_generate_url_cachebust_with_overrides>\n\n    def test_generate_url_cachebust_with_overrides(self):\n        config = testing.setUp()\n        try:\n            request = testing.DummyRequest()\n            config.add_static_view('static', 'path')\n            config.override_asset(\n                'pyramid.tests.test_config:path/',\n                'pyramid.tests.test_config:other_path/')\n            def cb(val):\n                def cb_(request, subpath, kw):\n                    kw['_query'] = {'x': val}\n                    return subpath, kw\n                return cb_\n            config.add_cache_buster('path', cb('foo'))\n            result = request.static_url('path/foo.png')\n            self.assertEqual(result, 'http://example.com/static/foo.png?x=foo')\n            config.add_cache_buster('other_path', cb('bar'), explicit=True)\n            result = request.static_url('path/foo.png')\n>           self.assertEqual(result, 'http://example.com/static/foo.png?x=bar')\nE           AssertionError: 'http://example.com/static/foo.png?x=foo' != 'http://example.com/static/foo.png?x=bar'\nE           - http://example.com/static/foo.png?x=foo\nE           ?                                     ^^^\nE           + http://example.com/static/foo.png?x=bar\nE           ?                                     ^^^\n\nr2e_tests/test_config/test_views.py:4049: 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:4220: 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:202: 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:92: 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:69: 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:107: 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._environ['REQUEST_METHOD'], 'GET')\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:116: AssertionError\n_______________ TestPRequestCommand.test_command_method_options ________________\n\nself = <r2e_tests.test_scripts.test_prequest.TestPRequestCommand testMethod=test_command_method_options>\n\n    def test_command_method_options(self):\n        from pyramid.compat import NativeIO\n        command = self._makeOne(['', '--method=OPTIONS', 'development.ini',\n                                '/'])\n        stdin = NativeIO()\n        command.stdin = stdin\n        command.run()\n        self.assertEqual(self._environ['REQUEST_METHOD'], 'OPTIONS')\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:184: AssertionError\n________________ TestPRequestCommand.test_command_method_patch _________________\n\nself = <r2e_tests.test_scripts.test_prequest.TestPRequestCommand testMethod=test_command_method_patch>\n\n    def test_command_method_patch(self):\n        from pyramid.compat import NativeIO\n        command = self._makeOne(['', '--method=PATCH', 'development.ini', '/'])\n        stdin = NativeIO()\n        command.stdin = stdin\n        command.run()\n        self.assertEqual(self._environ['REQUEST_METHOD'], 'PATCH')\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:158: 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['REQUEST_METHOD'], 'POST')\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:130: AssertionError\n_______________ TestPRequestCommand.test_command_method_propfind _______________\n\nself = <r2e_tests.test_scripts.test_prequest.TestPRequestCommand testMethod=test_command_method_propfind>\n\n    def test_command_method_propfind(self):\n        from pyramid.compat import NativeIO\n        command = self._makeOne(['', '--method=PROPFIND', 'development.ini',\n                                '/'])\n        stdin = NativeIO()\n        command.stdin = stdin\n        command.run()\n        self.assertEqual(self._environ['REQUEST_METHOD'], 'PROPFIND')\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:171: AssertionError\n_________________ TestPRequestCommand.test_command_method_put __________________\n\nself = <r2e_tests.test_scripts.test_prequest.TestPRequestCommand testMethod=test_command_method_put>\n\n    def test_command_method_put(self):\n        from pyramid.compat import NativeIO\n        command = self._makeOne(['', '--method=PUT', 'development.ini', '/'])\n        stdin = NativeIO()\n        command.stdin = stdin\n        command.run()\n        self.assertEqual(self._environ['REQUEST_METHOD'], 'PUT')\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:144: 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:50: 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:42: AssertionError\n________________ TestPRequestCommand.test_command_w_basic_auth _________________\n\nself = <r2e_tests.test_scripts.test_prequest.TestPRequestCommand testMethod=test_command_w_basic_auth>\n\n    def test_command_w_basic_auth(self):\n        command = self._makeOne(\n            ['', '--login=user:password',\n                 '--header=name:value','development.ini', '/'])\n        command.run()\n        self.assertEqual(self._environ['HTTP_NAME'], 'value')\n        self.assertEqual(self._environ['HTTP_AUTHORIZATION'],\n                        'Basic dXNlcjpwYXNzd29yZA==')\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:82: 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:193: AssertionError\n_______________ TestPRoutesCommand.test_config_format_ini_commas _______________\n\nself = <r2e_tests.test_scripts.test_proutes.TestPRoutesCommand testMethod=test_config_format_ini_commas>\n\n    def test_config_format_ini_commas(self):\n        from pyramid.renderers import null_renderer as nr\n        from pyramid.config import not_\n    \n        def view1(context, request): return 'view1'\n    \n        config = self._makeConfig(autocommit=True)\n        config.add_route('foo', '/a/b')\n        config.add_view(\n            route_name='foo',\n            view=view1,\n            renderer=nr,\n            request_method=not_('POST')\n        )\n    \n        command = self._makeOne()\n    \n        L = []\n        command.out = L.append\n        command.bootstrap = (dummy.DummyBootstrap(registry=config.registry),)\n        config_factory = dummy.DummyConfigParserFactory()\n        command.ConfigParser = config_factory\n        config_factory.items = [('format', 'method,name')]\n    \n        result = command.run()\n>       self.assertEqual(result, 0)\nE       AssertionError: 2 != 0\n\nr2e_tests/test_scripts/test_proutes.py:726: AssertionError\n______________ TestPRoutesCommand.test_config_format_ini_newlines ______________\n\nself = <r2e_tests.test_scripts.test_proutes.TestPRoutesCommand testMethod=test_config_format_ini_newlines>\n\n    def test_config_format_ini_newlines(self):\n        from pyramid.renderers import null_renderer as nr\n        from pyramid.config import not_\n    \n        def view1(context, request): return 'view1'\n    \n        config = self._makeConfig(autocommit=True)\n        config.add_route('foo', '/a/b')\n        config.add_view(\n            route_name='foo',\n            view=view1,\n            renderer=nr,\n            request_method=not_('POST')\n        )\n    \n        command = self._makeOne()\n    \n        L = []\n        command.out = L.append\n        command.bootstrap = (dummy.DummyBootstrap(registry=config.registry),)\n        config_factory = dummy.DummyConfigParserFactory()\n        command.ConfigParser = config_factory\n        config_factory.items = [('format', 'method\\nname')]\n    \n        result = command.run()\n>       self.assertEqual(result, 0)\nE       AssertionError: 2 != 0\n\nr2e_tests/test_scripts/test_proutes.py:660: AssertionError\n_______________ TestPRoutesCommand.test_config_format_ini_spaces _______________\n\nself = <r2e_tests.test_scripts.test_proutes.TestPRoutesCommand testMethod=test_config_format_ini_spaces>\n\n    def test_config_format_ini_spaces(self):\n        from pyramid.renderers import null_renderer as nr\n        from pyramid.config import not_\n    \n        def view1(context, request): return 'view1'\n    \n        config = self._makeConfig(autocommit=True)\n        config.add_route('foo', '/a/b')\n        config.add_view(\n            route_name='foo',\n            view=view1,\n            renderer=nr,\n            request_method=not_('POST')\n        )\n    \n        command = self._makeOne()\n    \n        L = []\n        command.out = L.append\n        command.bootstrap = (dummy.DummyBootstrap(registry=config.registry),)\n        config_factory = dummy.DummyConfigParserFactory()\n        command.ConfigParser = config_factory\n        config_factory.items = [('format', 'method name')]\n    \n        result = command.run()\n>       self.assertEqual(result, 0)\nE       AssertionError: 2 != 0\n\nr2e_tests/test_scripts/test_proutes.py:693: AssertionError\n_________ TestPRoutesCommand.test_one_route_all_methods_view_only_post _________\n\nself = <r2e_tests.test_scripts.test_proutes.TestPRoutesCommand testMethod=test_one_route_all_methods_view_only_post>\n\n    def test_one_route_all_methods_view_only_post(self):\n        from pyramid.renderers import null_renderer as nr\n    \n        def view1(context, request): return 'view1'\n    \n        config = self._makeConfig(autocommit=True)\n        config.add_route('foo', '/a/b')\n        config.add_view(\n            route_name='foo',\n            view=view1,\n            renderer=nr,\n            request_method='POST'\n        )\n    \n        command = self._makeOne()\n        L = []\n        command.out = L.append\n        command.bootstrap = (dummy.DummyBootstrap(registry=config.registry),)\n        result = command.run()\n        self.assertEqual(result, 0)\n        self.assertEqual(len(L), 3)\n        compare_to = L[-1].split()\n        expected = [\n            'foo', '/a/b',\n            'pyramid.tests.test_scripts.test_proutes.view1', 'POST'\n        ]\n>       self.assertEqual(compare_to, expected)\nE       AssertionError: Lists differ: ['foo', '/a/b', 'r2e_tests.test_scripts.test_proutes.view1', 'POST'] != ['foo', '/a/b', 'pyramid.tests.test_scripts.test_proutes.view1', 'POST']\nE       \nE       First differing element 2:\nE       'r2e_tests.test_scripts.test_proutes.view1'\nE       'pyramid.tests.test_scripts.test_proutes.view1'\nE       \nE       - ['foo', '/a/b', 'r2e_tests.test_scripts.test_proutes.view1', 'POST']\nE       ?                   ^^^\nE       \nE       + ['foo', '/a/b', 'pyramid.tests.test_scripts.test_proutes.view1', 'POST']\nE       ?                  ++ ^^^^^\n\nr2e_tests/test_scripts/test_proutes.py:309: AssertionError\n_________ TestPRoutesCommand.test_one_route_only_post_view_all_methods _________\n\nself = <r2e_tests.test_scripts.test_proutes.TestPRoutesCommand testMethod=test_one_route_only_post_view_all_methods>\n\n    def test_one_route_only_post_view_all_methods(self):\n        from pyramid.renderers import null_renderer as nr\n    \n        def view1(context, request): return 'view1'\n    \n        config = self._makeConfig(autocommit=True)\n        config.add_route('foo', '/a/b', request_method='POST')\n        config.add_view(\n            route_name='foo',\n            view=view1,\n            renderer=nr,\n        )\n    \n        command = self._makeOne()\n        L = []\n        command.out = L.append\n        command.bootstrap = (dummy.DummyBootstrap(registry=config.registry),)\n        result = command.run()\n        self.assertEqual(result, 0)\n        self.assertEqual(len(L), 3)\n        compare_to = L[-1].split()\n        expected = [\n            'foo', '/a/b',\n            'pyramid.tests.test_scripts.test_proutes.view1', 'POST'\n        ]\n>       self.assertEqual(compare_to, expected)\nE       AssertionError: Lists differ: ['foo', '/a/b', 'r2e_tests.test_scripts.test_proutes.view1', 'POST'] != ['foo', '/a/b', 'pyramid.tests.test_scripts.test_proutes.view1', 'POST']\nE       \nE       First differing element 2:\nE       'r2e_tests.test_scripts.test_proutes.view1'\nE       'pyramid.tests.test_scripts.test_proutes.view1'\nE       \nE       - ['foo', '/a/b', 'r2e_tests.test_scripts.test_proutes.view1', 'POST']\nE       ?                   ^^^\nE       \nE       + ['foo', '/a/b', 'pyramid.tests.test_scripts.test_proutes.view1', 'POST']\nE       ?                  ++ ^^^^^\n\nr2e_tests/test_scripts/test_proutes.py:336: AssertionError\n________ TestPRoutesCommand.test_one_route_only_post_view_post_and_get _________\n\nself = <r2e_tests.test_scripts.test_proutes.TestPRoutesCommand testMethod=test_one_route_only_post_view_post_and_get>\n\n    def test_one_route_only_post_view_post_and_get(self):\n        from pyramid.renderers import null_renderer as nr\n    \n        def view1(context, request): return 'view1'\n    \n        config = self._makeConfig(autocommit=True)\n        config.add_route('foo', '/a/b', request_method='POST')\n        config.add_view(\n            route_name='foo',\n            view=view1,\n            renderer=nr,\n            request_method=('POST', 'GET')\n        )\n    \n        command = self._makeOne()\n        L = []\n        command.out = L.append\n        command.bootstrap = (dummy.DummyBootstrap(registry=config.registry),)\n        result = command.run()\n        self.assertEqual(result, 0)\n        self.assertEqual(len(L), 3)\n        compare_to = L[-1].split()\n        expected = [\n            'foo', '/a/b',\n            'pyramid.tests.test_scripts.test_proutes.view1', 'POST'\n        ]\n>       self.assertEqual(compare_to, expected)\nE       AssertionError: Lists differ: ['foo', '/a/b', 'r2e_tests.test_scripts.test_proutes.view1', 'POST'] != ['foo', '/a/b', 'pyramid.tests.test_scripts.test_proutes.view1', 'POST']\nE       \nE       First differing element 2:\nE       'r2e_tests.test_scripts.test_proutes.view1'\nE       'pyramid.tests.test_scripts.test_proutes.view1'\nE       \nE       - ['foo', '/a/b', 'r2e_tests.test_scripts.test_proutes.view1', 'POST']\nE       ?                   ^^^\nE       \nE       + ['foo', '/a/b', 'pyramid.tests.test_scripts.test_proutes.view1', 'POST']\nE       ?                  ++ ^^^^^\n\nr2e_tests/test_scripts/test_proutes.py:364: AssertionError\n_____ TestPRoutesCommand.test_one_route_with_long_name_one_view_registered _____\n\nself = <r2e_tests.test_scripts.test_proutes.TestPRoutesCommand testMethod=test_one_route_with_long_name_one_view_registered>\n\n    def test_one_route_with_long_name_one_view_registered(self):\n        from zope.interface import Interface\n        from pyramid.interfaces import IRouteRequest\n        from pyramid.interfaces import IViewClassifier\n        from pyramid.interfaces import IView\n        registry = self._makeRegistry()\n    \n        def view():pass\n    \n        class IMyRoute(Interface):\n            pass\n    \n        registry.registerAdapter(\n            view,\n            (IViewClassifier, IMyRoute, Interface),\n            IView, ''\n        )\n    \n        registry.registerUtility(IMyRoute, IRouteRequest,\n                                 name='very_long_name_123')\n    \n        command = self._makeOne()\n        route = dummy.DummyRoute(\n            'very_long_name_123',\n            '/and_very_long_pattern_as_well'\n        )\n        mapper = dummy.DummyMapper(route)\n        command._get_mapper = lambda *arg: mapper\n        L = []\n        command.out = L.append\n        command.bootstrap = (dummy.DummyBootstrap(registry=registry),)\n        result = command.run()\n        self.assertEqual(result, 0)\n        self.assertEqual(len(L), 3)\n        compare_to = L[-1].split()[:3]\n>       self.assertEqual(\n            compare_to,\n            ['very_long_name_123',\n             '/and_very_long_pattern_as_well',\n             'pyramid.tests.test_scripts.test_proutes.view']\n        )\nE       AssertionError: Lists differ: ['ver[36 chars]ttern_as_well', 'r2e_tests.test_scripts.test_proutes.view'] != ['ver[36 chars]ttern_as_well', 'pyramid.tests.test_scripts.test_proutes.view']\nE       \nE       First differing element 2:\nE       'r2e_tests.test_scripts.test_proutes.view'\nE       'pyramid.tests.test_scripts.test_proutes.view'\nE       \nE         ['very_long_name_123',\nE          '/and_very_long_pattern_as_well',\nE       -  'r2e_tests.test_scripts.test_proutes.view']\nE       ?    ^^^\nE       \nE       +  'pyramid.tests.test_scripts.test_proutes.view']\nE       ?   ++ ^^^^^\n\nr2e_tests/test_scripts/test_proutes.py:195: AssertionError\n______ TestPRoutesCommand.test_route_is_get_view_request_method_not_post _______\n\nself = <r2e_tests.test_scripts.test_proutes.TestPRoutesCommand testMethod=test_route_is_get_view_request_method_not_post>\n\n    def test_route_is_get_view_request_method_not_post(self):\n        from pyramid.renderers import null_renderer as nr\n        from pyramid.config import not_\n    \n        def view1(context, request): return 'view1'\n    \n        config = self._makeConfig(autocommit=True)\n        config.add_route('foo', '/a/b', request_method='GET')\n        config.add_view(\n            route_name='foo',\n            view=view1,\n            renderer=nr,\n            request_method=not_('POST')\n        )\n    \n        command = self._makeOne()\n        L = []\n        command.out = L.append\n        command.bootstrap = (dummy.DummyBootstrap(registry=config.registry),)\n        result = command.run()\n        self.assertEqual(result, 0)\n        self.assertEqual(len(L), 3)\n        compare_to = L[-1].split()\n        expected = [\n            'foo', '/a/b',\n            'pyramid.tests.test_scripts.test_proutes.view1',\n            'GET'\n        ]\n>       self.assertEqual(compare_to, expected)\nE       AssertionError: Lists differ: ['foo', '/a/b', 'r2e_tests.test_scripts.test_proutes.view1', 'GET'] != ['foo', '/a/b', 'pyramid.tests.test_scripts.test_proutes.view1', 'GET']\nE       \nE       First differing element 2:\nE       'r2e_tests.test_scripts.test_proutes.view1'\nE       'pyramid.tests.test_scripts.test_proutes.view1'\nE       \nE       - ['foo', '/a/b', 'r2e_tests.test_scripts.test_proutes.view1', 'GET']\nE       ?                   ^^^\nE       \nE       + ['foo', '/a/b', 'pyramid.tests.test_scripts.test_proutes.view1', 'GET']\nE       ?                  ++ ^^^^^\n\nr2e_tests/test_scripts/test_proutes.py:503: AssertionError\n____________ TestPRoutesCommand.test_route_request_method_mismatch _____________\n\nself = <r2e_tests.test_scripts.test_proutes.TestPRoutesCommand testMethod=test_route_request_method_mismatch>\n\n    def test_route_request_method_mismatch(self):\n        from pyramid.renderers import null_renderer as nr\n    \n        def view1(context, request): return 'view1'\n    \n        config = self._makeConfig(autocommit=True)\n        config.add_route('foo', '/a/b', request_method='POST')\n        config.add_view(\n            route_name='foo',\n            view=view1,\n            renderer=nr,\n            request_method='GET'\n        )\n    \n        command = self._makeOne()\n        L = []\n        command.out = L.append\n        command.bootstrap = (dummy.DummyBootstrap(registry=config.registry),)\n        result = command.run()\n        self.assertEqual(result, 0)\n        self.assertEqual(len(L), 3)\n        compare_to = L[-1].split()\n        expected = [\n            'foo', '/a/b',\n            'pyramid.tests.test_scripts.test_proutes.view1',\n            '<route', 'mismatch>'\n        ]\n>       self.assertEqual(compare_to, expected)\nE       AssertionError: Lists differ: ['foo', '/a/b', 'r2e_tests.test_scripts.test_proutes.view1[20 chars]ch>'] != ['foo', '/a/b', 'pyramid.tests.test_scripts.test_proutes.v[24 chars]ch>']\nE       \nE       First differing element 2:\nE       'r2e_tests.test_scripts.test_proutes.view1'\nE       'pyramid.tests.test_scripts.test_proutes.view1'\nE       \nE         ['foo',\nE          '/a/b',\nE       -  'r2e_tests.test_scripts.test_proutes.view1',\nE       ?    ^^^\nE       \nE       +  'pyramid.tests.test_scripts.test_proutes.view1',\nE       ?   ++ ^^^^^\nE       \nE          '<route',\nE          'mismatch>']\n\nr2e_tests/test_scripts/test_proutes.py:393: AssertionError\n__________________ TestPRoutesCommand.test_route_static_views __________________\n\nself = <r2e_tests.test_scripts.test_proutes.TestPRoutesCommand testMethod=test_route_static_views>\n\n    def test_route_static_views(self):\n        from pyramid.renderers import null_renderer as nr\n        config = self._makeConfig(autocommit=True)\n        config.add_static_view('static', 'static', cache_max_age=3600)\n        config.add_static_view(name='static2', path='/var/www/static')\n        config.add_static_view(\n            name='pyramid_scaffold',\n            path='pyramid:scaffolds/starter/+package+/static'\n        )\n    \n        command = self._makeOne()\n        L = []\n        command.out = L.append\n        command.bootstrap = (dummy.DummyBootstrap(registry=config.registry),)\n        result = command.run()\n        self.assertEqual(result, 0)\n        self.assertEqual(len(L), 5)\n    \n        expected = [\n            ['__static/', '/static/*subpath',\n             'pyramid.tests.test_scripts:static/', '*'],\n            ['__static2/', '/static2/*subpath', '/var/www/static/', '*'],\n            ['__pyramid_scaffold/', '/pyramid_scaffold/*subpath',\n             'pyramid:scaffolds/starter/+package+/static/',  '*'],\n        ]\n    \n        for index, line in enumerate(L[2:]):\n            data = line.split()\n>           self.assertEqual(data, expected[index])\nE           AssertionError: Lists differ: ['__static/', '/static/*subpath', 'r2e_tests.test_scripts:static/', '*'] != ['__static/', '/static/*subpath', 'pyramid.tests.test_scripts:static/', '*']\nE           \nE           First differing element 2:\nE           'r2e_tests.test_scripts:static/'\nE           'pyramid.tests.test_scripts:static/'\nE           \nE           - ['__static/', '/static/*subpath', 'r2e_tests.test_scripts:static/', '*']\nE           ?                                     ^^^\nE           \nE           + ['__static/', '/static/*subpath', 'pyramid.tests.test_scripts:static/', '*']\nE           ?                                    ++ ^^^^^\n\nr2e_tests/test_scripts/test_proutes.py:423: AssertionError\n___________ TestPRoutesCommand.test_single_route_one_view_registered ___________\n\nself = <r2e_tests.test_scripts.test_proutes.TestPRoutesCommand testMethod=test_single_route_one_view_registered>\n\n    def test_single_route_one_view_registered(self):\n        from zope.interface import Interface\n        from pyramid.interfaces import IRouteRequest\n        from pyramid.interfaces import IViewClassifier\n        from pyramid.interfaces import IView\n        registry = self._makeRegistry()\n    \n        def view():pass\n        class IMyRoute(Interface):\n            pass\n        registry.registerAdapter(view,\n                                 (IViewClassifier, IMyRoute, Interface),\n                                 IView, '')\n        registry.registerUtility(IMyRoute, IRouteRequest, name='a')\n        command = self._makeOne()\n        route = dummy.DummyRoute('a', '/a')\n        mapper = dummy.DummyMapper(route)\n        command._get_mapper = lambda *arg: mapper\n        L = []\n        command.out = L.append\n        command.bootstrap = (dummy.DummyBootstrap(registry=registry),)\n        result = command.run()\n        self.assertEqual(result, 0)\n        self.assertEqual(len(L), 3)\n        compare_to = L[-1].split()[:3]\n>       self.assertEqual(\n            compare_to,\n            ['a', '/a', 'pyramid.tests.test_scripts.test_proutes.view']\n        )\nE       AssertionError: Lists differ: ['a', '/a', 'r2e_tests.test_scripts.test_proutes.view'] != ['a', '/a', 'pyramid.tests.test_scripts.test_proutes.view']\nE       \nE       First differing element 2:\nE       'r2e_tests.test_scripts.test_proutes.view'\nE       'pyramid.tests.test_scripts.test_proutes.view'\nE       \nE       - ['a', '/a', 'r2e_tests.test_scripts.test_proutes.view']\nE       ?               ^^^\nE       \nE       + ['a', '/a', 'pyramid.tests.test_scripts.test_proutes.view']\nE       ?              ++ ^^^^^\n\nr2e_tests/test_scripts/test_proutes.py:155: AssertionError\n______________________ TestPRoutesCommand.test_view_glob _______________________\n\nself = <r2e_tests.test_scripts.test_proutes.TestPRoutesCommand testMethod=test_view_glob>\n\n    def test_view_glob(self):\n        from pyramid.renderers import null_renderer as nr\n        from pyramid.config import not_\n    \n        def view1(context, request): return 'view1'\n        def view2(context, request): return 'view2'\n    \n        config = self._makeConfig(autocommit=True)\n        config.add_route('foo', '/a/b')\n        config.add_view(\n            route_name='foo',\n            view=view1,\n            renderer=nr,\n            request_method=not_('POST')\n        )\n    \n        config.add_route('bar', '/b/a')\n        config.add_view(\n            route_name='bar',\n            view=view2,\n            renderer=nr,\n            request_method=not_('POST')\n        )\n    \n        command = self._makeOne()\n        command.options.glob = '*foo*'\n    \n        L = []\n        command.out = L.append\n        command.bootstrap = (dummy.DummyBootstrap(registry=config.registry),)\n        result = command.run()\n        self.assertEqual(result, 0)\n        self.assertEqual(len(L), 3)\n        compare_to = L[-1].split()\n        expected = [\n            'foo', '/a/b',\n            'pyramid.tests.test_scripts.test_proutes.view1',\n            '!POST,*'\n        ]\n>       self.assertEqual(compare_to, expected)\nE       AssertionError: Lists differ: ['foo', '/a/b', 'r2e_tests.test_scripts.test_proutes.view1', '!POST,*'] != ['foo', '/a/b', 'pyramid.tests.test_scripts.test_proutes.view1', '!POST,*']\nE       \nE       First differing element 2:\nE       'r2e_tests.test_scripts.test_proutes.view1'\nE       'pyramid.tests.test_scripts.test_proutes.view1'\nE       \nE       - ['foo', '/a/b', 'r2e_tests.test_scripts.test_proutes.view1', '!POST,*']\nE       ?                   ^^^\nE       \nE       + ['foo', '/a/b', 'pyramid.tests.test_scripts.test_proutes.view1', '!POST,*']\nE       ?                  ++ ^^^^^\n\nr2e_tests/test_scripts/test_proutes.py:574: AssertionError\n_____________ TestPRoutesCommand.test_view_request_method_not_post _____________\n\nself = <r2e_tests.test_scripts.test_proutes.TestPRoutesCommand testMethod=test_view_request_method_not_post>\n\n    def test_view_request_method_not_post(self):\n        from pyramid.renderers import null_renderer as nr\n        from pyramid.config import not_\n    \n        def view1(context, request): return 'view1'\n    \n        config = self._makeConfig(autocommit=True)\n        config.add_route('foo', '/a/b')\n        config.add_view(\n            route_name='foo',\n            view=view1,\n            renderer=nr,\n            request_method=not_('POST')\n        )\n    \n        command = self._makeOne()\n        L = []\n        command.out = L.append\n        command.bootstrap = (dummy.DummyBootstrap(registry=config.registry),)\n        result = command.run()\n        self.assertEqual(result, 0)\n        self.assertEqual(len(L), 3)\n        compare_to = L[-1].split()\n        expected = [\n            'foo', '/a/b',\n            'pyramid.tests.test_scripts.test_proutes.view1',\n            '!POST,*'\n        ]\n>       self.assertEqual(compare_to, expected)\nE       AssertionError: Lists differ: ['foo', '/a/b', 'r2e_tests.test_scripts.test_proutes.view1', '!POST,*'] != ['foo', '/a/b', 'pyramid.tests.test_scripts.test_proutes.view1', '!POST,*']\nE       \nE       First differing element 2:\nE       'r2e_tests.test_scripts.test_proutes.view1'\nE       'pyramid.tests.test_scripts.test_proutes.view1'\nE       \nE       - ['foo', '/a/b', 'r2e_tests.test_scripts.test_proutes.view1', '!POST,*']\nE       ?                   ^^^\nE       \nE       + ['foo', '/a/b', 'pyramid.tests.test_scripts.test_proutes.view1', '!POST,*']\nE       ?                  ++ ^^^^^\n\nr2e_tests/test_scripts/test_proutes.py:533: 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: 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:296: AssertionError\n==================================== PASSES ====================================\n=========================== short test summary info ============================\nPASSED r2e_tests/test_1.py::Test_get_app::test_it\nPASSED r2e_tests/test_1.py::Test_get_app::test_it_with_dummyapp_requiring_options\nPASSED r2e_tests/test_1.py::Test_get_app::test_it_with_hash\nPASSED r2e_tests/test_1.py::Test_get_app::test_it_with_hash_and_name_override\nPASSED r2e_tests/test_1.py::Test_get_app::test_it_with_options\nPASSED r2e_tests/test_1.py::Test_get_appsettings::test_it\nPASSED r2e_tests/test_1.py::Test_get_appsettings::test_it_with_dummyapp_requiring_options\nPASSED r2e_tests/test_1.py::Test_get_appsettings::test_it_with_hash\nPASSED r2e_tests/test_1.py::Test_get_appsettings::test_it_with_hash_and_name_override\nPASSED r2e_tests/test_1.py::Test_setup_logging::test_it_global_conf_empty\nPASSED r2e_tests/test_1.py::Test_setup_logging::test_it_global_conf_not_empty\nPASSED r2e_tests/test_1.py::Test_setup_logging::test_it_no_global_conf\nPASSED r2e_tests/test_1.py::Test_bootstrap::test_it_request_with_registry\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_subscriber_predicate\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_subscriber_with_default_type_predicates_False\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_subscriber_with_default_type_predicates_True\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_subscriber_with_specific_type_and_predicates_False\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_subscriber_with_specific_type_and_predicates_True\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_adapters.py::Test_eventonly::test_defaults\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_absdirectory\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_directory_with_absfile\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_file_with_absdirectory\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_file_with_absfile\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_missing_abspath\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_absdirectory\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_class_conforms_to_IPEP302Loader\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_class_conforms_to_IPackageOverrides\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_filtered_sources\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_get_code_pkg_has___loader__\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_get_code_pkg_has_no___loader__\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_get_data_pkg_has___loader__\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_get_data_pkg_has_no___loader__\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_get_filename\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_source_pkg_has___loader__\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_get_source_pkg_has_no___loader__\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_instance_conforms_to_IPEP302Loader\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_instance_conforms_to_IPackageOverrides\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_is_package_pkg_has___loader__\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_is_package_pkg_has_no___loader__\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::TestPackageAssetSource::test_exists\nPASSED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_exists_file_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_exists_with_prefix\nPASSED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_get_filename_file_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_get_stream\nPASSED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_get_stream_file_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_get_stream_with_prefix\nPASSED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_get_string\nPASSED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_get_string_file_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_get_string_with_prefix\nPASSED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_isdir_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_isdir_false\nPASSED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_isdir_true\nPASSED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_listdir\nPASSED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_listdir_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_exists\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_exists_file_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_exists_with_prefix\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_get_filename\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_get_filename_file_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_get_filename_with_prefix\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_get_stream\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_get_stream_file_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_get_stream_with_prefix\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_get_string\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_get_string_file_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_get_string_with_prefix\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_isdir_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_isdir_false\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_isdir_true\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_listdir\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_listdir_doesnt_exist\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_add_request_method_with_None_callable\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_add_request_method_with_None_callable_and_no_name\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_add_request_method_with_None_callable_conflict\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_add_request_method_with_callable\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_add_request_method_with_text_type_name\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_add_request_method_with_unnamed_callable\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_multiple_request_methods_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_response_factory\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_response_factory_dottedname\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_factories.py::TestDeprecatedFactoriesMixinMethods::test_set_multiple_request_properties\nPASSED r2e_tests/test_config/test_factories.py::TestDeprecatedFactoriesMixinMethods::test_set_multiple_request_properties_conflict\nPASSED r2e_tests/test_config/test_factories.py::TestDeprecatedFactoriesMixinMethods::test_set_request_property_with_callable\nPASSED r2e_tests/test_config/test_factories.py::TestDeprecatedFactoriesMixinMethods::test_set_request_property_with_property\nPASSED r2e_tests/test_config/test_factories.py::TestDeprecatedFactoriesMixinMethods::test_set_request_property_with_unnamed_callable\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_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_adds__lock\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test__fix_registry_adds_clear_view_lookup_cache\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_default_webob_response_adapter_registered\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_views\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_registers_default_view_predicates\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_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_response_factory\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::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::TestConfigurator__add_predicate::test_factory_as_object\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::TestActionState::test_reentrant_action\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_reentrant_action_error\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_reentrant_action_without_clear\nPASSED r2e_tests/test_config/test_init.py::Test_reentrant_action_functional::test_functional\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_predicates.py::TestXHRPredicate::test___call___false\nPASSED r2e_tests/test_config/test_predicates.py::TestXHRPredicate::test___call___true\nPASSED r2e_tests/test_config/test_predicates.py::TestXHRPredicate::test_phash\nPASSED r2e_tests/test_config/test_predicates.py::TestXHRPredicate::test_text\nPASSED r2e_tests/test_config/test_predicates.py::TestRequestMethodPredicate::test___call___false\nPASSED r2e_tests/test_config/test_predicates.py::TestRequestMethodPredicate::test___call___true_multi\nPASSED r2e_tests/test_config/test_predicates.py::TestRequestMethodPredicate::test___call___true_single\nPASSED r2e_tests/test_config/test_predicates.py::TestRequestMethodPredicate::test_ctor_get_but_no_head\nPASSED r2e_tests/test_config/test_predicates.py::TestRequestMethodPredicate::test_phash\nPASSED r2e_tests/test_config/test_predicates.py::TestRequestMethodPredicate::test_text\nPASSED r2e_tests/test_config/test_predicates.py::TestPathInfoPredicate::test___call___false\nPASSED r2e_tests/test_config/test_predicates.py::TestPathInfoPredicate::test___call___true\nPASSED r2e_tests/test_config/test_predicates.py::TestPathInfoPredicate::test_ctor_compilefail\nPASSED r2e_tests/test_config/test_predicates.py::TestPathInfoPredicate::test_phash\nPASSED r2e_tests/test_config/test_predicates.py::TestPathInfoPredicate::test_text\nPASSED r2e_tests/test_config/test_predicates.py::TestRequestParamPredicate::test___call___false\nPASSED r2e_tests/test_config/test_predicates.py::TestRequestParamPredicate::test___call___false_multi\nPASSED r2e_tests/test_config/test_predicates.py::TestRequestParamPredicate::test___call___true_exists\nPASSED r2e_tests/test_config/test_predicates.py::TestRequestParamPredicate::test___call___true_multi\nPASSED r2e_tests/test_config/test_predicates.py::TestRequestParamPredicate::test___call___true_withval\nPASSED r2e_tests/test_config/test_predicates.py::TestRequestParamPredicate::test_phash_exists\nPASSED r2e_tests/test_config/test_predicates.py::TestRequestParamPredicate::test_phash_exists_equal_sign\nPASSED r2e_tests/test_config/test_predicates.py::TestRequestParamPredicate::test_phash_withval\nPASSED r2e_tests/test_config/test_predicates.py::TestRequestParamPredicate::test_text_exists\nPASSED r2e_tests/test_config/test_predicates.py::TestRequestParamPredicate::test_text_exists_equal_sign\nPASSED r2e_tests/test_config/test_predicates.py::TestRequestParamPredicate::test_text_multi\nPASSED r2e_tests/test_config/test_predicates.py::TestRequestParamPredicate::test_text_multi_equal_sign\nPASSED r2e_tests/test_config/test_predicates.py::TestRequestParamPredicate::test_text_withval\nPASSED r2e_tests/test_config/test_predicates.py::TestMatchParamPredicate::test___call___false\nPASSED r2e_tests/test_config/test_predicates.py::TestMatchParamPredicate::test___call___matchdict_is_None\nPASSED r2e_tests/test_config/test_predicates.py::TestMatchParamPredicate::test___call___true_multi\nPASSED r2e_tests/test_config/test_predicates.py::TestMatchParamPredicate::test___call___true_single\nPASSED r2e_tests/test_config/test_predicates.py::TestMatchParamPredicate::test_phash\nPASSED r2e_tests/test_config/test_predicates.py::TestMatchParamPredicate::test_text\nPASSED r2e_tests/test_config/test_predicates.py::TestCustomPredicate::test___call___false\nPASSED r2e_tests/test_config/test_predicates.py::TestCustomPredicate::test___call___true\nPASSED r2e_tests/test_config/test_predicates.py::TestCustomPredicate::test_phash\nPASSED r2e_tests/test_config/test_predicates.py::TestCustomPredicate::test_text_func_has___text__\nPASSED r2e_tests/test_config/test_predicates.py::TestCustomPredicate::test_text_func_repr\nPASSED r2e_tests/test_config/test_predicates.py::TestTraversePredicate::test___call__traverse_has_remainder_already\nPASSED r2e_tests/test_config/test_predicates.py::TestTraversePredicate::test___call__traverse_matches\nPASSED r2e_tests/test_config/test_predicates.py::TestTraversePredicate::test___call__traverse_matches_with_highorder_chars\nPASSED r2e_tests/test_config/test_predicates.py::TestTraversePredicate::test_phash\nPASSED r2e_tests/test_config/test_predicates.py::TestTraversePredicate::test_text\nPASSED r2e_tests/test_config/test_predicates.py::Test_CheckCSRFTokenPredicate::test_it_call_val_False\nPASSED r2e_tests/test_config/test_predicates.py::Test_CheckCSRFTokenPredicate::test_it_call_val_True\nPASSED r2e_tests/test_config/test_predicates.py::Test_CheckCSRFTokenPredicate::test_it_call_val_str\nPASSED r2e_tests/test_config/test_predicates.py::Test_CheckCSRFTokenPredicate::test_phash\nPASSED r2e_tests/test_config/test_predicates.py::Test_CheckCSRFTokenPredicate::test_text\nPASSED r2e_tests/test_config/test_predicates.py::TestHeaderPredicate::test___call___false\nPASSED r2e_tests/test_config/test_predicates.py::TestHeaderPredicate::test___call___false_withregex\nPASSED r2e_tests/test_config/test_predicates.py::TestHeaderPredicate::test___call___true_exists\nPASSED r2e_tests/test_config/test_predicates.py::TestHeaderPredicate::test___call___true_withregex\nPASSED r2e_tests/test_config/test_predicates.py::TestHeaderPredicate::test___call___true_withval\nPASSED r2e_tests/test_config/test_predicates.py::TestHeaderPredicate::test_phash_exists\nPASSED r2e_tests/test_config/test_predicates.py::TestHeaderPredicate::test_phash_withregex\nPASSED r2e_tests/test_config/test_predicates.py::TestHeaderPredicate::test_phash_withval\nPASSED r2e_tests/test_config/test_predicates.py::TestHeaderPredicate::test_text_exists\nPASSED r2e_tests/test_config/test_predicates.py::TestHeaderPredicate::test_text_withregex\nPASSED r2e_tests/test_config/test_predicates.py::TestHeaderPredicate::test_text_withval\nPASSED r2e_tests/test_config/test_predicates.py::Test_PhysicalPathPredicate::test_it_call_False\nPASSED r2e_tests/test_config/test_predicates.py::Test_PhysicalPathPredicate::test_it_call_context_has_no_name\nPASSED r2e_tests/test_config/test_predicates.py::Test_PhysicalPathPredicate::test_it_call_val_list_True\nPASSED r2e_tests/test_config/test_predicates.py::Test_PhysicalPathPredicate::test_it_call_val_str_True\nPASSED r2e_tests/test_config/test_predicates.py::Test_PhysicalPathPredicate::test_it_call_val_tuple_True\nPASSED r2e_tests/test_config/test_predicates.py::Test_PhysicalPathPredicate::test_phash\nPASSED r2e_tests/test_config/test_predicates.py::Test_PhysicalPathPredicate::test_text\nPASSED r2e_tests/test_config/test_predicates.py::Test_EffectivePrincipalsPredicate::test_it_call_authentication_policy_doesnt_provide_superset\nPASSED r2e_tests/test_config/test_predicates.py::Test_EffectivePrincipalsPredicate::test_it_call_authentication_policy_provides_superset\nPASSED r2e_tests/test_config/test_predicates.py::Test_EffectivePrincipalsPredicate::test_it_call_authentication_policy_provides_superset_implicit\nPASSED r2e_tests/test_config/test_predicates.py::Test_EffectivePrincipalsPredicate::test_it_call_no_authentication_policy\nPASSED r2e_tests/test_config/test_predicates.py::Test_EffectivePrincipalsPredicate::test_phash\nPASSED r2e_tests/test_config/test_predicates.py::Test_EffectivePrincipalsPredicate::test_text\nPASSED r2e_tests/test_config/test_predicates.py::Test_EffectivePrincipalsPredicate::test_text_noniter\nPASSED r2e_tests/test_config/test_rendering.py::TestRenderingConfiguratorMixin::test_add_default_renderers\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_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_add_permission\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_None\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_cachebust\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_testing.py::TestingConfiguratorMixinTests::test_testing_securitypolicy_forget_result\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_securitypolicy_remember_result\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_util.py::TestPredicateList::test_custom_predicates_can_affect_traversal\nPASSED r2e_tests/test_config/test_util.py::TestPredicateList::test_different_custom_predicates_with_same_hash\nPASSED r2e_tests/test_config/test_util.py::TestPredicateList::test_match_param_from_dict\nPASSED r2e_tests/test_config/test_util.py::TestPredicateList::test_match_param_from_dict_fails\nPASSED r2e_tests/test_config/test_util.py::TestPredicateList::test_match_param_from_string\nPASSED r2e_tests/test_config/test_util.py::TestPredicateList::test_match_param_from_string_fails\nPASSED r2e_tests/test_config/test_util.py::TestPredicateList::test_notted\nPASSED r2e_tests/test_config/test_util.py::TestPredicateList::test_ordering_importance_and_number\nPASSED r2e_tests/test_config/test_util.py::TestPredicateList::test_ordering_importance_of_predicates\nPASSED r2e_tests/test_config/test_util.py::TestPredicateList::test_ordering_number_of_predicates\nPASSED r2e_tests/test_config/test_util.py::TestPredicateList::test_ordering_xhr_and_request_method_trump_only_containment\nPASSED r2e_tests/test_config/test_util.py::TestPredicateList::test_predicate_text_is_correct\nPASSED r2e_tests/test_config/test_util.py::TestPredicateList::test_request_method_ordering_hashes_same\nPASSED r2e_tests/test_config/test_util.py::TestPredicateList::test_request_method_sequence\nPASSED r2e_tests/test_config/test_util.py::TestPredicateList::test_traverse_has_remainder_already\nPASSED r2e_tests/test_config/test_util.py::TestPredicateList::test_traverse_matches\nPASSED r2e_tests/test_config/test_util.py::TestPredicateList::test_traverse_matches_with_highorder_chars\nPASSED r2e_tests/test_config/test_util.py::TestPredicateList::test_unknown_predicate\nPASSED r2e_tests/test_config/test_util.py::Test_takes_one_arg::test_function_annotations\nPASSED r2e_tests/test_config/test_util.py::Test_takes_one_arg::test_function_defaultargs_firstname_not_request\nPASSED r2e_tests/test_config/test_util.py::Test_takes_one_arg::test_function_defaultargs_firstname_request\nPASSED r2e_tests/test_config/test_util.py::Test_takes_one_arg::test_function_noargs\nPASSED r2e_tests/test_config/test_util.py::Test_takes_one_arg::test_function_onearg_named_request\nPASSED r2e_tests/test_config/test_util.py::Test_takes_one_arg::test_function_onearg_named_somethingelse\nPASSED r2e_tests/test_config/test_util.py::Test_takes_one_arg::test_function_toomanyargs\nPASSED r2e_tests/test_config/test_util.py::Test_takes_one_arg::test_function_with_attr_false\nPASSED r2e_tests/test_config/test_util.py::Test_takes_one_arg::test_function_with_attr_true\nPASSED r2e_tests/test_config/test_util.py::Test_takes_one_arg::test_instance_defaultargs_firstname_not_request\nPASSED r2e_tests/test_config/test_util.py::Test_takes_one_arg::test_instance_defaultargs_firstname_request\nPASSED r2e_tests/test_config/test_util.py::Test_takes_one_arg::test_instance_defaultargs_onearg_named_request\nPASSED r2e_tests/test_config/test_util.py::Test_takes_one_arg::test_instance_defaultargs_onearg_named_somethingelse\nPASSED r2e_tests/test_config/test_util.py::Test_takes_one_arg::test_instance_nocall\nPASSED r2e_tests/test_config/test_util.py::Test_takes_one_arg::test_instance_toomanyargs\nPASSED r2e_tests/test_config/test_util.py::Test_takes_one_arg::test_method_onearg_named_request\nPASSED r2e_tests/test_config/test_util.py::Test_takes_one_arg::test_newstyle_class_init_defaultargs_firstname_not_request\nPASSED r2e_tests/test_config/test_util.py::Test_takes_one_arg::test_newstyle_class_init_defaultargs_firstname_request\nPASSED r2e_tests/test_config/test_util.py::Test_takes_one_arg::test_newstyle_class_init_firstname_request_with_secondname\nPASSED r2e_tests/test_config/test_util.py::Test_takes_one_arg::test_newstyle_class_init_noargs\nPASSED r2e_tests/test_config/test_util.py::Test_takes_one_arg::test_newstyle_class_init_onearg_named_somethingelse\nPASSED r2e_tests/test_config/test_util.py::Test_takes_one_arg::test_oldstyle_class_init_defaultargs_firstname_not_request\nPASSED r2e_tests/test_config/test_util.py::Test_takes_one_arg::test_oldstyle_class_init_defaultargs_firstname_request\nPASSED r2e_tests/test_config/test_util.py::Test_takes_one_arg::test_oldstyle_class_init_noargs\nPASSED r2e_tests/test_config/test_util.py::Test_takes_one_arg::test_oldstyle_class_init_onearg_named_request\nPASSED r2e_tests/test_config/test_util.py::Test_takes_one_arg::test_oldstyle_class_init_onearg_named_somethingelse\nPASSED r2e_tests/test_config/test_util.py::Test_takes_one_arg::test_oldstyle_class_init_toomanyargs\nPASSED r2e_tests/test_config/test_util.py::Test_takes_one_arg::test_oldstyle_class_no_init\nPASSED r2e_tests/test_config/test_util.py::Test_takes_one_arg::test_requestonly_newstyle_class_init_onearg_named_request\nPASSED r2e_tests/test_config/test_util.py::Test_takes_one_arg::test_requestonly_newstyle_class_init_toomanyargs\nPASSED r2e_tests/test_config/test_util.py::Test_takes_one_arg::test_requestonly_newstyle_class_no_init\nPASSED r2e_tests/test_config/test_util.py::TestNotted::test_it_with_phash_val\nPASSED r2e_tests/test_config/test_util.py::TestNotted::test_it_without_phash_val\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_allows_other_predicates\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_forbidden_view_disallows_context\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_forbidden_view_disallows_for_\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_forbidden_view_disallows_http_cache\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_forbidden_view_disallows_name\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_forbidden_view_disallows_permission\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_forbidden_view_no_view_argument\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_forbidden_view_with_view_defaults\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_allows_other_predicates\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_append_slash_custom_response\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_notfound_view_disallows_context\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_notfound_view_disallows_for_\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_notfound_view_disallows_http_cache\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_notfound_view_disallows_name\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_notfound_view_disallows_permission\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_notfound_view_no_view_argument\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_notfound_view_with_view_defaults\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_class_method_no_attr\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_mixed_case_replaces_existing_view\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_decorator_tuple\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_tmpl_renderer_factory_introspector_missing\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_tmpl_renderer_factory_no_renderer_factory\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_tmpl_renderer_factory_with_renderer_factory\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::TestViewsConfigurationMixin::test_view_with_most_specific_predicate\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_view_with_most_specific_predicate_with_mismatch\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_defaults\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_otherattr\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_add_with_phash_override_accept2\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_function_returns_true_Response_no_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_function_returns_true_Response_with_renderer\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_exception_has_text_in_detail\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_cachebust_prevented\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_cachebuster\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_cachebuster_abspath\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_cachebuster_for_more_specific_path\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_cachebuster_overwrite\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_cachebuster_overwrite_explicit\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_package_root\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_noscheme\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_context\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_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_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_cachebust\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_url_cachebust_abspath\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_url_cachebust_nomatch\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_generate_url_with_custom_anchor\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_url_with_custom_query\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_common.py::TestParseVars::test_parse_vars_bad\nPASSED r2e_tests/test_scripts/test_common.py::TestParseVars::test_parse_vars_good\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_confirm_override_conflicting_name\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_force_override_conflicting_name\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_force_override_site_name\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_known_scaffold_with_path_as_project_target_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_no_scaffold_no_args\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_scaffold_with_dev_pyramid_long_version\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_scaffold_with_dev_pyramid_version\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_scaffold_with_hyphen_in_project_name\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_scaffold_with_prod_pyramid_long_version\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_scaffold_with_prod_pyramid_unparsable_version\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_scaffold_with_prod_pyramid_version\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_pdistreport.py::TestPDistReportCommand::test_no_dists\nPASSED r2e_tests/test_scripts/test_pdistreport.py::TestPDistReportCommand::test_with_dists\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_method_configures_logging\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_bad_args\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_bad_format\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_good_args\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_good_format\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_as_wsgiapp\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_route_no_view\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_multiview_registered\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_with_factory\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_static_routes_included_in_list\nPASSED r2e_tests/test_scripts/test_proutes.py::Test_main::test_it\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_get_options_no_command\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_get_options_with_command\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_default_shell_option\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_errors_with_unknown_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_ipython\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_loads_pythonstartup\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_list_shells\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_shell_entry_points\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_shell_ordering\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_shell_override\nPASSED r2e_tests/test_scripts/test_pshell.py::Test_python_shell_runner::test_it\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::TestAssetsConfiguratorMixin::test_override_asset_directory_with_directory\nFAILED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_directory_with_package\nFAILED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_file_with_file\nFAILED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_package_with_directory\nFAILED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_package_with_package\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::TestPackageAssetSource::test_get_filename\nFAILED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_get_filename_with_prefix\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_include_constant_root_package\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_add_directive_with_custom_callable\nFAILED r2e_tests/test_config/test_init.py::TestConfigurator_add_directive::test_add_directive_with_partial\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_init.py::TestConfigurator__add_predicate::test_factory_as_dotted_name\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::TestStaticURLInfo::test_generate_url_cachebust_with_overrides\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_options\nFAILED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_method_patch\nFAILED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_method_post\nFAILED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_method_propfind\nFAILED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_method_put\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_w_basic_auth\nFAILED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_with_query_string\nFAILED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_config_format_ini_commas\nFAILED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_config_format_ini_newlines\nFAILED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_config_format_ini_spaces\nFAILED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_one_route_all_methods_view_only_post\nFAILED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_one_route_only_post_view_all_methods\nFAILED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_one_route_only_post_view_post_and_get\nFAILED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_one_route_with_long_name_one_view_registered\nFAILED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_route_is_get_view_request_method_not_post\nFAILED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_route_request_method_mismatch\nFAILED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_route_static_views\nFAILED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_single_route_one_view_registered\nFAILED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_view_glob\nFAILED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_view_request_method_not_post\nFAILED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_single_view_function_traversal\n======================== 65 failed, 896 passed in 5.68s ========================\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_d6ee2312b8e3b155452682d2400fac7c773d3a9e\ncollected 961 items\n\nr2e_tests/test_1.py .........FFF.                                        [  1%]\nr2e_tests/test_config/test_adapters.py .FF..............F...             [  3%]\nr2e_tests/test_config/test_assets.py ....F.F...F...FF.FF................ [  7%]\n.....................................F.F................................ [ 14%]\n                                                                         [ 14%]\nr2e_tests/test_config/test_factories.py .....................            [ 16%]\nr2e_tests/test_config/test_i18n.py FFF.FF...                             [ 17%]\nr2e_tests/test_config/test_init.py ..................................... [ 21%]\n...F..F.......F.............F...........F.....................FF...FFF.. [ 29%]\n......................                                                   [ 31%]\nr2e_tests/test_config/test_predicates.py ............................... [ 34%]\n...........................................                              [ 39%]\nr2e_tests/test_config/test_rendering.py ...                              [ 39%]\nr2e_tests/test_config/test_routes.py ........................            [ 41%]\nr2e_tests/test_config/test_security.py ..........                        [ 42%]\nr2e_tests/test_config/test_settings.py ........................          [ 45%]\nr2e_tests/test_config/test_testing.py ............                       [ 46%]\nr2e_tests/test_config/test_tweens.py .................................   [ 50%]\nr2e_tests/test_config/test_util.py ..................................... [ 54%]\n..............                                                           [ 55%]\nr2e_tests/test_config/test_views.py ........................F........... [ 59%]\n........................................................................ [ 66%]\n......FF................................................................ [ 74%]\n...........FF.........F...F....F........................................ [ 81%]\n......................F.......F                                          [ 84%]\nr2e_tests/test_scripts/test_common.py ...                                [ 85%]\nr2e_tests/test_scripts/test_pcreate.py ....................              [ 87%]\nr2e_tests/test_scripts/test_pdistreport.py ..                            [ 87%]\nr2e_tests/test_scripts/test_prequest.py F.FFF.FFFFFF.F.FFF.              [ 89%]\nr2e_tests/test_scripts/test_proutes.py ...FFF....FFFF.F.FF....F..FF.     [ 92%]\nr2e_tests/test_scripts/test_pserve.py ............................       [ 95%]\nr2e_tests/test_scripts/test_pshell.py ................                   [ 97%]\nr2e_tests/test_scripts/test_ptweens.py .....                             [ 97%]\nr2e_tests/test_scripts/test_pviews.py ................F......            [100%]\n\n=================================== FAILURES ===================================\n_________________ Test_setup_logging.test_it_global_conf_empty _________________\n\nself = <r2e_tests.test_1.Test_setup_logging testMethod=test_it_global_conf_empty>\n\n    def test_it_global_conf_empty(self):\n>       config_file, dict = self._callFUT('/abc', global_conf={})\n\nr2e_tests/test_1.py:126: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = <r2e_tests.test_1.Test_setup_logging testMethod=test_it_global_conf_empty>\nconfig_file = '/abc', global_conf = {}\n\n    def _callFUT(self, config_file, global_conf=None):\n        from pyramid.paster import setup_logging\n        dummy_cp = DummyConfigParserModule\n>       return setup_logging(\n            config_uri=config_file,\n            global_conf=global_conf,\n            fileConfig=self.fileConfig,\n            configparser=dummy_cp,\n            )\nE       TypeError: setup_logging() got an unexpected keyword argument 'global_conf'\n\nr2e_tests/test_1.py:111: TypeError\n_______________ Test_setup_logging.test_it_global_conf_not_empty _______________\n\nself = <r2e_tests.test_1.Test_setup_logging testMethod=test_it_global_conf_not_empty>\n\n    def test_it_global_conf_not_empty(self):\n>       config_file, dict = self._callFUT('/abc', global_conf={'key': 'val'})\n\nr2e_tests/test_1.py:133: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = <r2e_tests.test_1.Test_setup_logging testMethod=test_it_global_conf_not_empty>\nconfig_file = '/abc', global_conf = {'key': 'val'}\n\n    def _callFUT(self, config_file, global_conf=None):\n        from pyramid.paster import setup_logging\n        dummy_cp = DummyConfigParserModule\n>       return setup_logging(\n            config_uri=config_file,\n            global_conf=global_conf,\n            fileConfig=self.fileConfig,\n            configparser=dummy_cp,\n            )\nE       TypeError: setup_logging() got an unexpected keyword argument 'global_conf'\n\nr2e_tests/test_1.py:111: TypeError\n__________________ Test_setup_logging.test_it_no_global_conf ___________________\n\nself = <r2e_tests.test_1.Test_setup_logging testMethod=test_it_no_global_conf>\n\n    def test_it_no_global_conf(self):\n>       config_file, dict = self._callFUT('/abc')\n\nr2e_tests/test_1.py:119: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = <r2e_tests.test_1.Test_setup_logging testMethod=test_it_no_global_conf>\nconfig_file = '/abc', global_conf = None\n\n    def _callFUT(self, config_file, global_conf=None):\n        from pyramid.paster import setup_logging\n        dummy_cp = DummyConfigParserModule\n>       return setup_logging(\n            config_uri=config_file,\n            global_conf=global_conf,\n            fileConfig=self.fileConfig,\n            configparser=dummy_cp,\n            )\nE       TypeError: setup_logging() got an unexpected keyword argument 'global_conf'\n\nr2e_tests/test_1.py:111: TypeError\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:280: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = <Registry r2e_tests.test_config>\nobjects = (<r2e_tests.test_config.test_adapters.DummyIface object at 0x741ad5a77df0>, <r2e_tests.test_config.test_adapters.DummyIface object at 0x741ad5a77df0>)\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 0x741ad5a77df0>, <r2e_tests.test_config.test_adapters.DummyIface object at 0x741ad5a77df0>), <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:326: 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:237: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = <Registry r2e_tests.test_config>\nobject = <r2e_tests.test_config.test_adapters.DummyIface object at 0x741ad59732b0>\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 0x741ad59732b0>, <InterfaceClass pyramid.interfaces.ITraverser>, '')\n\n.venv/lib/python3.8/site-packages/zope/interface/registry.py:368: ComponentLookupError\n___ TestAssetsConfiguratorMixin.test_override_asset_directory_with_directory ___\n\nself = <r2e_tests.test_config.test_assets.TestAssetsConfiguratorMixin testMethod=test_override_asset_directory_with_directory>\n\n    def test_override_asset_directory_with_directory(self):\n        from pyramid.config.assets import PackageAssetSource\n        config = self._makeOne(autocommit=True)\n        override = DummyUnderOverride()\n        config.override_asset(\n            'pyramid.tests.test_config.pkgs.asset:templates/',\n            'pyramid.tests.test_config.pkgs.asset.subpackage:templates/',\n            _override=override)\n        from pyramid.tests.test_config.pkgs import asset\n        from pyramid.tests.test_config.pkgs.asset import subpackage\n        self.assertEqual(override.package, asset)\n        self.assertEqual(override.path, 'templates/')\n        source = override.source\n        self.assertTrue(isinstance(source, PackageAssetSource))\n        self.assertEqual(source.package, subpackage)\n        self.assertEqual(source.prefix, 'templates/')\n    \n        resource_name = 'bar.pt'\n        expected = os.path.join(here, 'pkgs', 'asset',\n                                'subpackage', 'templates', 'bar.pt')\n>       self.assertEqual(override.source.get_filename(resource_name),\n                         expected)\nE       AssertionError: '/hom[90 chars]3a9e/pyramid/tests/test_config/pkgs/asset/subp[19 chars]r.pt' != '/hom[90 chars]3a9e/r2e_tests/test_config/pkgs/asset/subpacka[15 chars]r.pt'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_d6ee2312b8e3b155452682d2400fac7c773d3a9e/pyramid/tests/test_config/pkgs/asset/subpackage/templates/bar.pt\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_d6ee2312b8e3b155452682d2400fac7c773d3a9e/r2e_tests/test_config/pkgs/asset/subpackage/templates/bar.pt\nE       ?                                                                                                     ^^^\n\nr2e_tests/test_config/test_assets.py:106: AssertionError\n____ TestAssetsConfiguratorMixin.test_override_asset_directory_with_package ____\n\nself = <r2e_tests.test_config.test_assets.TestAssetsConfiguratorMixin testMethod=test_override_asset_directory_with_package>\n\n    def test_override_asset_directory_with_package(self):\n        from pyramid.config.assets import PackageAssetSource\n        config = self._makeOne(autocommit=True)\n        override = DummyUnderOverride()\n        config.override_asset(\n            'pyramid.tests.test_config.pkgs.asset:templates/',\n            'pyramid.tests.test_config.pkgs.asset.subpackage',\n            _override=override)\n        from pyramid.tests.test_config.pkgs import asset\n        from pyramid.tests.test_config.pkgs.asset import subpackage\n        self.assertEqual(override.package, asset)\n        self.assertEqual(override.path, 'templates/')\n        source = override.source\n        self.assertTrue(isinstance(source, PackageAssetSource))\n        self.assertEqual(source.package, subpackage)\n        self.assertEqual(source.prefix, '')\n    \n        resource_name = 'templates/bar.pt'\n        expected = os.path.join(here, 'pkgs', 'asset',\n                                'subpackage', 'templates', 'bar.pt')\n>       self.assertEqual(override.source.get_filename(resource_name),\n                         expected)\nE       AssertionError: '/hom[90 chars]3a9e/pyramid/tests/test_config/pkgs/asset/subp[19 chars]r.pt' != '/hom[90 chars]3a9e/r2e_tests/test_config/pkgs/asset/subpacka[15 chars]r.pt'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_d6ee2312b8e3b155452682d2400fac7c773d3a9e/pyramid/tests/test_config/pkgs/asset/subpackage/templates/bar.pt\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_d6ee2312b8e3b155452682d2400fac7c773d3a9e/r2e_tests/test_config/pkgs/asset/subpackage/templates/bar.pt\nE       ?                                                                                                     ^^^\n\nr2e_tests/test_config/test_assets.py:129: AssertionError\n________ TestAssetsConfiguratorMixin.test_override_asset_file_with_file ________\n\nself = <r2e_tests.test_config.test_assets.TestAssetsConfiguratorMixin testMethod=test_override_asset_file_with_file>\n\n    def test_override_asset_file_with_file(self):\n        from pyramid.config.assets import PackageAssetSource\n        config = self._makeOne(autocommit=True)\n        override = DummyUnderOverride()\n        config.override_asset(\n            'pyramid.tests.test_config.pkgs.asset:templates/foo.pt',\n            'pyramid.tests.test_config.pkgs.asset.subpackage:templates/bar.pt',\n            _override=override)\n        from pyramid.tests.test_config.pkgs import asset\n        from pyramid.tests.test_config.pkgs.asset import subpackage\n        self.assertEqual(override.package, asset)\n        self.assertEqual(override.path, 'templates/foo.pt')\n        source = override.source\n        self.assertTrue(isinstance(source, PackageAssetSource))\n        self.assertEqual(source.package, subpackage)\n        self.assertEqual(source.prefix, 'templates/bar.pt')\n    \n        resource_name = ''\n        expected = os.path.join(here, 'pkgs', 'asset',\n                                'subpackage', 'templates', 'bar.pt')\n>       self.assertEqual(override.source.get_filename(resource_name),\n                         expected)\nE       AssertionError: '/hom[90 chars]3a9e/pyramid/tests/test_config/pkgs/asset/subp[19 chars]r.pt' != '/hom[90 chars]3a9e/r2e_tests/test_config/pkgs/asset/subpacka[15 chars]r.pt'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_d6ee2312b8e3b155452682d2400fac7c773d3a9e/pyramid/tests/test_config/pkgs/asset/subpackage/templates/bar.pt\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_d6ee2312b8e3b155452682d2400fac7c773d3a9e/r2e_tests/test_config/pkgs/asset/subpackage/templates/bar.pt\nE       ?                                                                                                     ^^^\n\nr2e_tests/test_config/test_assets.py:60: AssertionError\n____ TestAssetsConfiguratorMixin.test_override_asset_package_with_directory ____\n\nself = <r2e_tests.test_config.test_assets.TestAssetsConfiguratorMixin testMethod=test_override_asset_package_with_directory>\n\n    def test_override_asset_package_with_directory(self):\n        from pyramid.config.assets import PackageAssetSource\n        config = self._makeOne(autocommit=True)\n        override = DummyUnderOverride()\n        config.override_asset(\n            'pyramid.tests.test_config.pkgs.asset',\n            'pyramid.tests.test_config.pkgs.asset.subpackage:templates/',\n            _override=override)\n        from pyramid.tests.test_config.pkgs import asset\n        from pyramid.tests.test_config.pkgs.asset import subpackage\n        self.assertEqual(override.package, asset)\n        self.assertEqual(override.path, '')\n        source = override.source\n        self.assertTrue(isinstance(source, PackageAssetSource))\n        self.assertEqual(source.package, subpackage)\n        self.assertEqual(source.prefix, 'templates/')\n    \n        resource_name = 'bar.pt'\n        expected = os.path.join(here, 'pkgs', 'asset',\n                                'subpackage', 'templates', 'bar.pt')\n>       self.assertEqual(override.source.get_filename(resource_name),\n                         expected)\nE       AssertionError: '/hom[90 chars]3a9e/pyramid/tests/test_config/pkgs/asset/subp[19 chars]r.pt' != '/hom[90 chars]3a9e/r2e_tests/test_config/pkgs/asset/subpacka[15 chars]r.pt'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_d6ee2312b8e3b155452682d2400fac7c773d3a9e/pyramid/tests/test_config/pkgs/asset/subpackage/templates/bar.pt\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_d6ee2312b8e3b155452682d2400fac7c773d3a9e/r2e_tests/test_config/pkgs/asset/subpackage/templates/bar.pt\nE       ?                                                                                                     ^^^\n\nr2e_tests/test_config/test_assets.py:152: AssertionError\n_____ TestAssetsConfiguratorMixin.test_override_asset_package_with_package _____\n\nself = <r2e_tests.test_config.test_assets.TestAssetsConfiguratorMixin testMethod=test_override_asset_package_with_package>\n\n    def test_override_asset_package_with_package(self):\n        from pyramid.config.assets import PackageAssetSource\n        config = self._makeOne(autocommit=True)\n        override = DummyUnderOverride()\n        config.override_asset(\n            'pyramid.tests.test_config.pkgs.asset',\n            'pyramid.tests.test_config.pkgs.asset.subpackage',\n            _override=override)\n        from pyramid.tests.test_config.pkgs import asset\n        from pyramid.tests.test_config.pkgs.asset import subpackage\n        self.assertEqual(override.package, asset)\n        self.assertEqual(override.path, '')\n        source = override.source\n        self.assertTrue(isinstance(source, PackageAssetSource))\n        self.assertEqual(source.package, subpackage)\n        self.assertEqual(source.prefix, '')\n    \n        resource_name = 'templates/bar.pt'\n        expected = os.path.join(here, 'pkgs', 'asset',\n                                'subpackage', 'templates', 'bar.pt')\n>       self.assertEqual(override.source.get_filename(resource_name),\n                         expected)\nE       AssertionError: '/hom[90 chars]3a9e/pyramid/tests/test_config/pkgs/asset/subp[19 chars]r.pt' != '/hom[90 chars]3a9e/r2e_tests/test_config/pkgs/asset/subpacka[15 chars]r.pt'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_d6ee2312b8e3b155452682d2400fac7c773d3a9e/pyramid/tests/test_config/pkgs/asset/subpackage/templates/bar.pt\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_d6ee2312b8e3b155452682d2400fac7c773d3a9e/r2e_tests/test_config/pkgs/asset/subpackage/templates/bar.pt\nE       ?                                                                                                     ^^^\n\nr2e_tests/test_config/test_assets.py:83: AssertionError\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        resource_name = 'test_assets.py'\n        import pyramid.tests.test_config\n        provider = self._makeOne(pyramid.tests.test_config)\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]682d2400fac7c773d3a9e/pyramid/tests/test_config/test_assets.py' != '/hom[73 chars]682d2400fac7c773d3a9e/r2e_tests/test_config/test_assets.py'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_d6ee2312b8e3b155452682d2400fac7c773d3a9e/pyramid/tests/test_config/test_assets.py\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_d6ee2312b8e3b155452682d2400fac7c773d3a9e/r2e_tests/test_config/test_assets.py\nE       ?                                                                                                     ^^^\n\nr2e_tests/test_config/test_assets.py:297: 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        resource_name = 'test_assets.py'\n        import pyramid.tests.test_config\n        provider = self._makeOne(pyramid.tests.test_config)\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]682d2400fac7c773d3a9e/pyramid/tests/test_config/test_assets.py' != '/hom[73 chars]682d2400fac7c773d3a9e/r2e_tests/test_config/test_assets.py'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_d6ee2312b8e3b155452682d2400fac7c773d3a9e/pyramid/tests/test_config/test_assets.py\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_d6ee2312b8e3b155452682d2400fac7c773d3a9e/r2e_tests/test_config/test_assets.py\nE       ?                                                                                                     ^^^\n\nr2e_tests/test_config/test_assets.py:345: AssertionError\n___________________ TestPackageAssetSource.test_get_filename ___________________\n\nself = <r2e_tests.test_config.test_assets.TestPackageAssetSource testMethod=test_get_filename>\n\n    def test_get_filename(self):\n        source = self._makeOne('')\n>       self.assertEqual(source.get_filename('test_assets.py'),\n                         os.path.join(here, 'test_assets.py'))\nE       AssertionError: '/hom[73 chars]682d2400fac7c773d3a9e/pyramid/tests/test_config/test_assets.py' != '/hom[73 chars]682d2400fac7c773d3a9e/r2e_tests/test_config/test_assets.py'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_d6ee2312b8e3b155452682d2400fac7c773d3a9e/pyramid/tests/test_config/test_assets.py\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_d6ee2312b8e3b155452682d2400fac7c773d3a9e/r2e_tests/test_config/test_assets.py\nE       ?                                                                                                     ^^^\n\nr2e_tests/test_config/test_assets.py:716: AssertionError\n_____________ TestPackageAssetSource.test_get_filename_with_prefix _____________\n\nself = <r2e_tests.test_config.test_assets.TestPackageAssetSource testMethod=test_get_filename_with_prefix>\n\n    def test_get_filename_with_prefix(self):\n        source = self._makeOne('test_assets.py')\n>       self.assertEqual(source.get_filename(''),\n                         os.path.join(here, 'test_assets.py'))\nE       AssertionError: '/hom[73 chars]682d2400fac7c773d3a9e/pyramid/tests/test_config/test_assets.py' != '/hom[73 chars]682d2400fac7c773d3a9e/r2e_tests/test_config/test_assets.py'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_d6ee2312b8e3b155452682d2400fac7c773d3a9e/pyramid/tests/test_config/test_assets.py\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_d6ee2312b8e3b155452682d2400fac7c773d3a9e/r2e_tests/test_config/test_assets.py\nE       ?                                                                                                     ^^^\n\nr2e_tests/test_config/test_assets.py:721: 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:86: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \npyramid/util.py:571: in wrapper\n    result = wrapped(self, *arg, **kw)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = <pyramid.config.Configurator object at 0x741ad5f485e0>\nspecs = ('/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_d6ee2312b8e3b155452682d2400fac7c773d3a9e/r2e_tests/pkgs/localeapp/locale',)\nintrospectables = []\nspec = '/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_d6ee2312b8e3b155452682d2400fac7c773d3a9e/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_d6ee2312b8e3b155452682d2400fac7c773d3a9e/r2e_tests/pkgs/localeapp/locale\" is not a directory\n\npyramid/config/i18n.py:86: 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]5452682d2400fac7c773d3a9e/pyramid/tests/pkgs/localeapp/locale'] != ['/ho[70 chars]5452682d2400fac7c773d3a9e/r2e_tests/pkgs/localeapp/locale']\nE       \nE       First differing element 0:\nE       '/hom[68 chars]55452682d2400fac7c773d3a9e/pyramid/tests/pkgs/localeapp/locale'\nE       '/hom[68 chars]55452682d2400fac7c773d3a9e/r2e_tests/pkgs/localeapp/locale'\nE       \nE       - ['/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_d6ee2312b8e3b155452682d2400fac7c773d3a9e/pyramid/tests/pkgs/localeapp/locale']\nE       ?                                                                                                      -- ^^^^^\nE       \nE       + ['/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_d6ee2312b8e3b155452682d2400fac7c773d3a9e/r2e_tests/pkgs/localeapp/locale']\nE       ?                                                                                                       ^^^\n\nr2e_tests/test_config/test_i18n.py:54: 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]d2400fac7c773d3a9e/pyramid/tests/pkgs/localeapp/locale', 'abc'] != ['/ho[77 chars]d2400fac7c773d3a9e/r2e_tests/pkgs/localeapp/locale', 'abc']\nE       \nE       First differing element 0:\nE       '/hom[68 chars]55452682d2400fac7c773d3a9e/pyramid/tests/pkgs/localeapp/locale'\nE       '/hom[68 chars]55452682d2400fac7c773d3a9e/r2e_tests/pkgs/localeapp/locale'\nE       \nE       - ['/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_d6ee2312b8e3b155452682d2400fac7c773d3a9e/pyramid/tests/pkgs/localeapp/locale',\nE       ?                                                                                                      -- ^^^^^\nE       \nE       + ['/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_d6ee2312b8e3b155452682d2400fac7c773d3a9e/r2e_tests/pkgs/localeapp/locale',\nE       ?                                                                                                       ^^^\nE       \nE          'abc']\n\nr2e_tests/test_config/test_i18n.py:64: 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]3a9e/pyramid/tests/pkgs/localeapp/locale', '/h[130 chars]le2'] != ['/ho[91 chars]3a9e/r2e_tests/pkgs/localeapp/locale', '/home/[122 chars]le2']\nE       \nE       First differing element 0:\nE       '/hom[68 chars]55452682d2400fac7c773d3a9e/pyramid/tests/pkgs/localeapp/locale'\nE       '/hom[68 chars]55452682d2400fac7c773d3a9e/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:71: 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]3a9e/pyramid/tests/pkgs/localeapp/locale3', '/[269 chars]le2'] != ['/ho[91 chars]3a9e/r2e_tests/pkgs/localeapp/locale3', '/home[257 chars]le2']\nE       \nE       First differing element 0:\nE       '/hom[69 chars]5452682d2400fac7c773d3a9e/pyramid/tests/pkgs/localeapp/locale3'\nE       '/hom[69 chars]5452682d2400fac7c773d3a9e/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:80: 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:124: AssertionError\n_____________ ConfiguratorTests.test_include_constant_root_package _____________\n\nself = <r2e_tests.test_config.test_init.ConfiguratorTests testMethod=test_include_constant_root_package>\n\n    def test_include_constant_root_package(self):\n        from pyramid import tests\n        from pyramid.tests import test_config\n        config = self._makeOne(root_package=tests)\n        results = {}\n        def include(config):\n            results['package'] = config.package\n            results['root_package'] = config.root_package\n        config.include(include)\n        self.assertEqual(results['root_package'], tests)\n>       self.assertEqual(results['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_init.py:777: 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:1039: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \npyramid/config/__init__.py:652: in commit\n    self.action_state.execute_actions(introspector=self.introspector)\npyramid/config/__init__.py:1161: in execute_actions\n    action = next(pending_actions, None)\npyramid/config/__init__.py:1119: in resume\n    for a, b in zip_longest(actions, executed_actions):\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nactions = [{'args': (), 'callable': <function ViewsConfiguratorMixin.add_view.<locals>.register at 0x741ad567bf70>, 'discriminat...1ad5681430>, 'discriminator': ('view', None, 'two', None, 'd41d8cd98f00b204e9800998ecf8427e'), 'includepath': (), ...}]\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        def orderandpos(v):\n            n, v = v\n            if not isinstance(v, dict):\n                # old-style tuple action\n                v = expand_action(*v)\n            return (v['order'] or 0, n)\n    \n        sactions = sorted(enumerate(actions), key=orderandpos)\n    \n        def orderonly(v):\n            n, v = v\n            if not isinstance(v, dict):\n                # old-style tuple action\n                v = expand_action(*v)\n            return v['order'] or 0\n    \n        for order, actiongroup in itertools.groupby(sactions, orderonly):\n            # \"order\" is an integer grouping. Actions in a lower order will be\n            # executed before actions in a higher order.  All of the actions in\n            # one grouping will be executed (its callable, if any will be called)\n            # before any of the actions in the next.\n    \n            unique = {}\n            output = []\n    \n            for i, action in actiongroup:\n                # Within an order, actions are executed sequentially based on\n                # original action ordering (\"i\").\n    \n                if not isinstance(action, dict):\n                    # old-style tuple action\n                    action = expand_action(*action)\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                discriminator = undefer(action['discriminator'])\n                action['discriminator'] = discriminator\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                # 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 = (\n                    action['includepath'],\n                    action['info'],\n                    action['discriminator'],\n                    )\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 or  # not a prefix\n                            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, 'd41d8cd98f00b204e9800998ecf8427e')\nE                   Line 4 of file /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_d6ee2312b8e3b155452682d2400fac7c773d3a9e/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_d6ee2312b8e3b155452682d2400fac7c773d3a9e/pyramid/tests/test_config/pkgs/selfscan/__init__.py:\nE                       def abc(request):\nE                 For: ('view', None, 'two', None, 'd41d8cd98f00b204e9800998ecf8427e')\nE                   Line 4 of file /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_d6ee2312b8e3b155452682d2400fac7c773d3a9e/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_d6ee2312b8e3b155452682d2400fac7c773d3a9e/pyramid/tests/test_config/pkgs/selfscan/another.py:\nE                       def two(request):\n\npyramid/config/__init__.py:1297: 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:1048: 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:444: AssertionError\n____ TestConfigurator_add_directive.test_add_directive_with_custom_callable ____\n\nself = <r2e_tests.test_config.test_init.TestConfigurator_add_directive testMethod=test_add_directive_with_custom_callable>\n\n    def test_add_directive_with_custom_callable(self):\n        from pyramid.tests import test_config\n        config = self.config\n        config.add_directive(\n                'dummy_callable', 'pyramid.tests.test_config.dummy_callable')\n        self.assertTrue(hasattr(config, 'dummy_callable'))\n        config.dummy_callable('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:1247: AssertionError\n________ TestConfigurator_add_directive.test_add_directive_with_partial ________\n\nself = <r2e_tests.test_config.test_init.TestConfigurator_add_directive testMethod=test_add_directive_with_partial>\n\n    def test_add_directive_with_partial(self):\n        from pyramid.tests import test_config\n        config = self.config\n        config.add_directive(\n                'dummy_partial', 'pyramid.tests.test_config.dummy_partial')\n        self.assertTrue(hasattr(config, 'dummy_partial'))\n        config.dummy_partial()\n        after = config.action_state\n        action = after.actions[-1]\n        self.assertEqual(action['discriminator'], 'partial')\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:1234: 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:1221: 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:1260: AssertionError\n_________ TestConfigurator__add_predicate.test_factory_as_dotted_name __________\n\nself = <r2e_tests.test_config.test_init.TestConfigurator__add_predicate testMethod=test_factory_as_dotted_name>\n\n    def test_factory_as_dotted_name(self):\n        config = self._makeOne()\n    \n        def _fakeAction(discriminator, callable=None, args=(),\n                        kw=None, order=0, introspectables=(), **extra):\n            self.assertEqual(len(introspectables), 1)\n            self.assertEqual(introspectables[0]['name'], 'testing')\n            self.assertEqual(introspectables[0]['factory'], DummyPredicate)\n    \n        config.action = _fakeAction\n>       config._add_predicate(\n            'route',\n            'testing',\n            'pyramid.tests.test_config.test_init.DummyPredicate'\n            )\n\nr2e_tests/test_config/test_init.py:1324: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \npyramid/config/__init__.py:541: in _add_predicate\n    self.action(discriminator, register, introspectables=(intr,),\nr2e_tests/test_config/test_init.py:1321: in _fakeAction\n    self.assertEqual(introspectables[0]['factory'], DummyPredicate)\nE   AssertionError: <class 'pyramid.tests.test_config.test_init.DummyPredicate'> != <class 'r2e_tests.test_config.test_init.DummyPredicate'>\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]41ad5b9cac0>, 'static', 'r2e_tests.test_config:files', {})] != [(<py[39 chars]41ad5b9cac0>, 'static', 'pyramid.tests.test_config:files', {})]\nE       \nE       First differing element 0:\nE       (<pyr[37 chars]741ad5b9cac0>, 'static', 'r2e_tests.test_config:files', {})\nE       (<pyr[37 chars]741ad5b9cac0>, 'static', 'pyramid.tests.test_config:files', {})\nE       \nE         [(<pyramid.config.Configurator object at 0x741ad5b9cac0>,\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:1842: 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.introspection = False\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:1143: 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.introspection = False\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:1184: 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:2507: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\ncontext = None, request = None\n\n    def viewresult_to_response(context, request):\n        result = view(context, request)\n        if result.__class__ is Response:  # common case\n            response = result\n        else:\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 '\n                              'from the view callable.')\n                elif isinstance(result, dict):\n                    append = (' You may have forgotten to define a '\n                              'renderer in the view configuration.')\n                else:\n                    append = ''\n    \n                msg = ('Could not convert return value of the view '\n                       'callable %s 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:413: 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:2509: 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:2526: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\ncontext = None, request = None\n\n    def viewresult_to_response(context, request):\n        result = view(context, request)\n        if result.__class__ is Response:  # common case\n            response = result\n        else:\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 '\n                              'from the view callable.')\n                elif isinstance(result, dict):\n                    append = (' You may have forgotten to define a '\n                              'renderer in the view configuration.')\n                else:\n                    append = ''\n    \n                msg = ('Could not convert return value of the view '\n                       'callable %s 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:413: 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:2528: 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:2547: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\ncontext = None, request = None\n\n    def viewresult_to_response(context, request):\n        result = view(context, request)\n        if result.__class__ is Response:  # common case\n            response = result\n        else:\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 '\n                              'from the view callable.')\n                elif isinstance(result, dict):\n                    append = (' You may have forgotten to define a '\n                              'renderer in the view configuration.')\n                else:\n                    append = ''\n    \n                msg = ('Could not convert return value of the view '\n                       'callable %s 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 0x741ad5935a00> 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:413: 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:2550: 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:2593: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\ncontext = None\nrequest = <r2e_tests.test_config.test_views.DummyRequest object at 0x741ad540dfd0>\n\n    def viewresult_to_response(context, request):\n        result = view(context, request)\n        if result.__class__ is Response:  # common case\n            response = result\n        else:\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 '\n                              'from the view callable.')\n                elif isinstance(result, dict):\n                    append = (' You may have forgotten to define a '\n                              'renderer in the view configuration.')\n                else:\n                    append = ''\n    \n                msg = ('Could not convert return value of the view '\n                       'callable %s 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:413: 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:2595: 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:2617: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\ncontext = None\nrequest = <r2e_tests.test_config.test_views.DummyRequest object at 0x741ad5c04a90>\n\n    def viewresult_to_response(context, request):\n        result = view(context, request)\n        if result.__class__ is Response:  # common case\n            response = result\n        else:\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 '\n                              'from the view callable.')\n                elif isinstance(result, dict):\n                    append = (' You may have forgotten to define a '\n                              'renderer in the view configuration.')\n                else:\n                    append = ''\n    \n                msg = ('Could not convert return value of the view '\n                       'callable %s 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:413: 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:2619: AssertionError\n_________ TestStaticURLInfo.test_generate_url_cachebust_with_overrides _________\n\nself = <r2e_tests.test_config.test_views.TestStaticURLInfo testMethod=test_generate_url_cachebust_with_overrides>\n\n    def test_generate_url_cachebust_with_overrides(self):\n        config = testing.setUp()\n        try:\n            request = testing.DummyRequest()\n            config.add_static_view('static', 'path')\n            config.override_asset(\n                'pyramid.tests.test_config:path/',\n                'pyramid.tests.test_config:other_path/')\n            def cb(val):\n                def cb_(request, subpath, kw):\n                    kw['_query'] = {'x': val}\n                    return subpath, kw\n                return cb_\n            config.add_cache_buster('path', cb('foo'))\n            result = request.static_url('path/foo.png')\n            self.assertEqual(result, 'http://example.com/static/foo.png?x=foo')\n            config.add_cache_buster('other_path', cb('bar'), explicit=True)\n            result = request.static_url('path/foo.png')\n>           self.assertEqual(result, 'http://example.com/static/foo.png?x=bar')\nE           AssertionError: 'http://example.com/static/foo.png?x=foo' != 'http://example.com/static/foo.png?x=bar'\nE           - http://example.com/static/foo.png?x=foo\nE           ?                                     ^^^\nE           + http://example.com/static/foo.png?x=bar\nE           ?                                     ^^^\n\nr2e_tests/test_config/test_views.py:4049: 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:4220: 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:202: 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:92: 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:69: 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:107: 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._environ['REQUEST_METHOD'], 'GET')\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:116: AssertionError\n_______________ TestPRequestCommand.test_command_method_options ________________\n\nself = <r2e_tests.test_scripts.test_prequest.TestPRequestCommand testMethod=test_command_method_options>\n\n    def test_command_method_options(self):\n        from pyramid.compat import NativeIO\n        command = self._makeOne(['', '--method=OPTIONS', 'development.ini',\n                                '/'])\n        stdin = NativeIO()\n        command.stdin = stdin\n        command.run()\n        self.assertEqual(self._environ['REQUEST_METHOD'], 'OPTIONS')\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:184: AssertionError\n________________ TestPRequestCommand.test_command_method_patch _________________\n\nself = <r2e_tests.test_scripts.test_prequest.TestPRequestCommand testMethod=test_command_method_patch>\n\n    def test_command_method_patch(self):\n        from pyramid.compat import NativeIO\n        command = self._makeOne(['', '--method=PATCH', 'development.ini', '/'])\n        stdin = NativeIO()\n        command.stdin = stdin\n        command.run()\n        self.assertEqual(self._environ['REQUEST_METHOD'], 'PATCH')\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:158: 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['REQUEST_METHOD'], 'POST')\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:130: AssertionError\n_______________ TestPRequestCommand.test_command_method_propfind _______________\n\nself = <r2e_tests.test_scripts.test_prequest.TestPRequestCommand testMethod=test_command_method_propfind>\n\n    def test_command_method_propfind(self):\n        from pyramid.compat import NativeIO\n        command = self._makeOne(['', '--method=PROPFIND', 'development.ini',\n                                '/'])\n        stdin = NativeIO()\n        command.stdin = stdin\n        command.run()\n        self.assertEqual(self._environ['REQUEST_METHOD'], 'PROPFIND')\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:171: AssertionError\n_________________ TestPRequestCommand.test_command_method_put __________________\n\nself = <r2e_tests.test_scripts.test_prequest.TestPRequestCommand testMethod=test_command_method_put>\n\n    def test_command_method_put(self):\n        from pyramid.compat import NativeIO\n        command = self._makeOne(['', '--method=PUT', 'development.ini', '/'])\n        stdin = NativeIO()\n        command.stdin = stdin\n        command.run()\n        self.assertEqual(self._environ['REQUEST_METHOD'], 'PUT')\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:144: 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:50: 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:42: AssertionError\n________________ TestPRequestCommand.test_command_w_basic_auth _________________\n\nself = <r2e_tests.test_scripts.test_prequest.TestPRequestCommand testMethod=test_command_w_basic_auth>\n\n    def test_command_w_basic_auth(self):\n        command = self._makeOne(\n            ['', '--login=user:password',\n                 '--header=name:value','development.ini', '/'])\n        command.run()\n        self.assertEqual(self._environ['HTTP_NAME'], 'value')\n        self.assertEqual(self._environ['HTTP_AUTHORIZATION'],\n                        'Basic dXNlcjpwYXNzd29yZA==')\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:82: 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:193: AssertionError\n_______________ TestPRoutesCommand.test_config_format_ini_commas _______________\n\nself = <r2e_tests.test_scripts.test_proutes.TestPRoutesCommand testMethod=test_config_format_ini_commas>\n\n    def test_config_format_ini_commas(self):\n        from pyramid.renderers import null_renderer as nr\n        from pyramid.config import not_\n    \n        def view1(context, request): return 'view1'\n    \n        config = self._makeConfig(autocommit=True)\n        config.add_route('foo', '/a/b')\n        config.add_view(\n            route_name='foo',\n            view=view1,\n            renderer=nr,\n            request_method=not_('POST')\n        )\n    \n        command = self._makeOne()\n    \n        L = []\n        command.out = L.append\n        command.bootstrap = (dummy.DummyBootstrap(registry=config.registry),)\n        config_factory = dummy.DummyConfigParserFactory()\n        command.ConfigParser = config_factory\n        config_factory.items = [('format', 'method,name')]\n    \n        result = command.run()\n>       self.assertEqual(result, 0)\nE       AssertionError: 2 != 0\n\nr2e_tests/test_scripts/test_proutes.py:726: AssertionError\n______________ TestPRoutesCommand.test_config_format_ini_newlines ______________\n\nself = <r2e_tests.test_scripts.test_proutes.TestPRoutesCommand testMethod=test_config_format_ini_newlines>\n\n    def test_config_format_ini_newlines(self):\n        from pyramid.renderers import null_renderer as nr\n        from pyramid.config import not_\n    \n        def view1(context, request): return 'view1'\n    \n        config = self._makeConfig(autocommit=True)\n        config.add_route('foo', '/a/b')\n        config.add_view(\n            route_name='foo',\n            view=view1,\n            renderer=nr,\n            request_method=not_('POST')\n        )\n    \n        command = self._makeOne()\n    \n        L = []\n        command.out = L.append\n        command.bootstrap = (dummy.DummyBootstrap(registry=config.registry),)\n        config_factory = dummy.DummyConfigParserFactory()\n        command.ConfigParser = config_factory\n        config_factory.items = [('format', 'method\\nname')]\n    \n        result = command.run()\n>       self.assertEqual(result, 0)\nE       AssertionError: 2 != 0\n\nr2e_tests/test_scripts/test_proutes.py:660: AssertionError\n_______________ TestPRoutesCommand.test_config_format_ini_spaces _______________\n\nself = <r2e_tests.test_scripts.test_proutes.TestPRoutesCommand testMethod=test_config_format_ini_spaces>\n\n    def test_config_format_ini_spaces(self):\n        from pyramid.renderers import null_renderer as nr\n        from pyramid.config import not_\n    \n        def view1(context, request): return 'view1'\n    \n        config = self._makeConfig(autocommit=True)\n        config.add_route('foo', '/a/b')\n        config.add_view(\n            route_name='foo',\n            view=view1,\n            renderer=nr,\n            request_method=not_('POST')\n        )\n    \n        command = self._makeOne()\n    \n        L = []\n        command.out = L.append\n        command.bootstrap = (dummy.DummyBootstrap(registry=config.registry),)\n        config_factory = dummy.DummyConfigParserFactory()\n        command.ConfigParser = config_factory\n        config_factory.items = [('format', 'method name')]\n    \n        result = command.run()\n>       self.assertEqual(result, 0)\nE       AssertionError: 2 != 0\n\nr2e_tests/test_scripts/test_proutes.py:693: AssertionError\n_________ TestPRoutesCommand.test_one_route_all_methods_view_only_post _________\n\nself = <r2e_tests.test_scripts.test_proutes.TestPRoutesCommand testMethod=test_one_route_all_methods_view_only_post>\n\n    def test_one_route_all_methods_view_only_post(self):\n        from pyramid.renderers import null_renderer as nr\n    \n        def view1(context, request): return 'view1'\n    \n        config = self._makeConfig(autocommit=True)\n        config.add_route('foo', '/a/b')\n        config.add_view(\n            route_name='foo',\n            view=view1,\n            renderer=nr,\n            request_method='POST'\n        )\n    \n        command = self._makeOne()\n        L = []\n        command.out = L.append\n        command.bootstrap = (dummy.DummyBootstrap(registry=config.registry),)\n        result = command.run()\n        self.assertEqual(result, 0)\n        self.assertEqual(len(L), 3)\n        compare_to = L[-1].split()\n        expected = [\n            'foo', '/a/b',\n            'pyramid.tests.test_scripts.test_proutes.view1', 'POST'\n        ]\n>       self.assertEqual(compare_to, expected)\nE       AssertionError: Lists differ: ['foo', '/a/b', 'r2e_tests.test_scripts.test_proutes.view1', 'POST'] != ['foo', '/a/b', 'pyramid.tests.test_scripts.test_proutes.view1', 'POST']\nE       \nE       First differing element 2:\nE       'r2e_tests.test_scripts.test_proutes.view1'\nE       'pyramid.tests.test_scripts.test_proutes.view1'\nE       \nE       - ['foo', '/a/b', 'r2e_tests.test_scripts.test_proutes.view1', 'POST']\nE       ?                   ^^^\nE       \nE       + ['foo', '/a/b', 'pyramid.tests.test_scripts.test_proutes.view1', 'POST']\nE       ?                  ++ ^^^^^\n\nr2e_tests/test_scripts/test_proutes.py:309: AssertionError\n_________ TestPRoutesCommand.test_one_route_only_post_view_all_methods _________\n\nself = <r2e_tests.test_scripts.test_proutes.TestPRoutesCommand testMethod=test_one_route_only_post_view_all_methods>\n\n    def test_one_route_only_post_view_all_methods(self):\n        from pyramid.renderers import null_renderer as nr\n    \n        def view1(context, request): return 'view1'\n    \n        config = self._makeConfig(autocommit=True)\n        config.add_route('foo', '/a/b', request_method='POST')\n        config.add_view(\n            route_name='foo',\n            view=view1,\n            renderer=nr,\n        )\n    \n        command = self._makeOne()\n        L = []\n        command.out = L.append\n        command.bootstrap = (dummy.DummyBootstrap(registry=config.registry),)\n        result = command.run()\n        self.assertEqual(result, 0)\n        self.assertEqual(len(L), 3)\n        compare_to = L[-1].split()\n        expected = [\n            'foo', '/a/b',\n            'pyramid.tests.test_scripts.test_proutes.view1', 'POST'\n        ]\n>       self.assertEqual(compare_to, expected)\nE       AssertionError: Lists differ: ['foo', '/a/b', 'r2e_tests.test_scripts.test_proutes.view1', 'POST'] != ['foo', '/a/b', 'pyramid.tests.test_scripts.test_proutes.view1', 'POST']\nE       \nE       First differing element 2:\nE       'r2e_tests.test_scripts.test_proutes.view1'\nE       'pyramid.tests.test_scripts.test_proutes.view1'\nE       \nE       - ['foo', '/a/b', 'r2e_tests.test_scripts.test_proutes.view1', 'POST']\nE       ?                   ^^^\nE       \nE       + ['foo', '/a/b', 'pyramid.tests.test_scripts.test_proutes.view1', 'POST']\nE       ?                  ++ ^^^^^\n\nr2e_tests/test_scripts/test_proutes.py:336: AssertionError\n________ TestPRoutesCommand.test_one_route_only_post_view_post_and_get _________\n\nself = <r2e_tests.test_scripts.test_proutes.TestPRoutesCommand testMethod=test_one_route_only_post_view_post_and_get>\n\n    def test_one_route_only_post_view_post_and_get(self):\n        from pyramid.renderers import null_renderer as nr\n    \n        def view1(context, request): return 'view1'\n    \n        config = self._makeConfig(autocommit=True)\n        config.add_route('foo', '/a/b', request_method='POST')\n        config.add_view(\n            route_name='foo',\n            view=view1,\n            renderer=nr,\n            request_method=('POST', 'GET')\n        )\n    \n        command = self._makeOne()\n        L = []\n        command.out = L.append\n        command.bootstrap = (dummy.DummyBootstrap(registry=config.registry),)\n        result = command.run()\n        self.assertEqual(result, 0)\n        self.assertEqual(len(L), 3)\n        compare_to = L[-1].split()\n        expected = [\n            'foo', '/a/b',\n            'pyramid.tests.test_scripts.test_proutes.view1', 'POST'\n        ]\n>       self.assertEqual(compare_to, expected)\nE       AssertionError: Lists differ: ['foo', '/a/b', 'r2e_tests.test_scripts.test_proutes.view1', 'POST'] != ['foo', '/a/b', 'pyramid.tests.test_scripts.test_proutes.view1', 'POST']\nE       \nE       First differing element 2:\nE       'r2e_tests.test_scripts.test_proutes.view1'\nE       'pyramid.tests.test_scripts.test_proutes.view1'\nE       \nE       - ['foo', '/a/b', 'r2e_tests.test_scripts.test_proutes.view1', 'POST']\nE       ?                   ^^^\nE       \nE       + ['foo', '/a/b', 'pyramid.tests.test_scripts.test_proutes.view1', 'POST']\nE       ?                  ++ ^^^^^\n\nr2e_tests/test_scripts/test_proutes.py:364: AssertionError\n_____ TestPRoutesCommand.test_one_route_with_long_name_one_view_registered _____\n\nself = <r2e_tests.test_scripts.test_proutes.TestPRoutesCommand testMethod=test_one_route_with_long_name_one_view_registered>\n\n    def test_one_route_with_long_name_one_view_registered(self):\n        from zope.interface import Interface\n        from pyramid.interfaces import IRouteRequest\n        from pyramid.interfaces import IViewClassifier\n        from pyramid.interfaces import IView\n        registry = self._makeRegistry()\n    \n        def view():pass\n    \n        class IMyRoute(Interface):\n            pass\n    \n        registry.registerAdapter(\n            view,\n            (IViewClassifier, IMyRoute, Interface),\n            IView, ''\n        )\n    \n        registry.registerUtility(IMyRoute, IRouteRequest,\n                                 name='very_long_name_123')\n    \n        command = self._makeOne()\n        route = dummy.DummyRoute(\n            'very_long_name_123',\n            '/and_very_long_pattern_as_well'\n        )\n        mapper = dummy.DummyMapper(route)\n        command._get_mapper = lambda *arg: mapper\n        L = []\n        command.out = L.append\n        command.bootstrap = (dummy.DummyBootstrap(registry=registry),)\n        result = command.run()\n        self.assertEqual(result, 0)\n        self.assertEqual(len(L), 3)\n        compare_to = L[-1].split()[:3]\n>       self.assertEqual(\n            compare_to,\n            ['very_long_name_123',\n             '/and_very_long_pattern_as_well',\n             'pyramid.tests.test_scripts.test_proutes.view']\n        )\nE       AssertionError: Lists differ: ['ver[36 chars]ttern_as_well', 'r2e_tests.test_scripts.test_proutes.view'] != ['ver[36 chars]ttern_as_well', 'pyramid.tests.test_scripts.test_proutes.view']\nE       \nE       First differing element 2:\nE       'r2e_tests.test_scripts.test_proutes.view'\nE       'pyramid.tests.test_scripts.test_proutes.view'\nE       \nE         ['very_long_name_123',\nE          '/and_very_long_pattern_as_well',\nE       -  'r2e_tests.test_scripts.test_proutes.view']\nE       ?    ^^^\nE       \nE       +  'pyramid.tests.test_scripts.test_proutes.view']\nE       ?   ++ ^^^^^\n\nr2e_tests/test_scripts/test_proutes.py:195: AssertionError\n______ TestPRoutesCommand.test_route_is_get_view_request_method_not_post _______\n\nself = <r2e_tests.test_scripts.test_proutes.TestPRoutesCommand testMethod=test_route_is_get_view_request_method_not_post>\n\n    def test_route_is_get_view_request_method_not_post(self):\n        from pyramid.renderers import null_renderer as nr\n        from pyramid.config import not_\n    \n        def view1(context, request): return 'view1'\n    \n        config = self._makeConfig(autocommit=True)\n        config.add_route('foo', '/a/b', request_method='GET')\n        config.add_view(\n            route_name='foo',\n            view=view1,\n            renderer=nr,\n            request_method=not_('POST')\n        )\n    \n        command = self._makeOne()\n        L = []\n        command.out = L.append\n        command.bootstrap = (dummy.DummyBootstrap(registry=config.registry),)\n        result = command.run()\n        self.assertEqual(result, 0)\n        self.assertEqual(len(L), 3)\n        compare_to = L[-1].split()\n        expected = [\n            'foo', '/a/b',\n            'pyramid.tests.test_scripts.test_proutes.view1',\n            'GET'\n        ]\n>       self.assertEqual(compare_to, expected)\nE       AssertionError: Lists differ: ['foo', '/a/b', 'r2e_tests.test_scripts.test_proutes.view1', 'GET'] != ['foo', '/a/b', 'pyramid.tests.test_scripts.test_proutes.view1', 'GET']\nE       \nE       First differing element 2:\nE       'r2e_tests.test_scripts.test_proutes.view1'\nE       'pyramid.tests.test_scripts.test_proutes.view1'\nE       \nE       - ['foo', '/a/b', 'r2e_tests.test_scripts.test_proutes.view1', 'GET']\nE       ?                   ^^^\nE       \nE       + ['foo', '/a/b', 'pyramid.tests.test_scripts.test_proutes.view1', 'GET']\nE       ?                  ++ ^^^^^\n\nr2e_tests/test_scripts/test_proutes.py:503: AssertionError\n____________ TestPRoutesCommand.test_route_request_method_mismatch _____________\n\nself = <r2e_tests.test_scripts.test_proutes.TestPRoutesCommand testMethod=test_route_request_method_mismatch>\n\n    def test_route_request_method_mismatch(self):\n        from pyramid.renderers import null_renderer as nr\n    \n        def view1(context, request): return 'view1'\n    \n        config = self._makeConfig(autocommit=True)\n        config.add_route('foo', '/a/b', request_method='POST')\n        config.add_view(\n            route_name='foo',\n            view=view1,\n            renderer=nr,\n            request_method='GET'\n        )\n    \n        command = self._makeOne()\n        L = []\n        command.out = L.append\n        command.bootstrap = (dummy.DummyBootstrap(registry=config.registry),)\n        result = command.run()\n        self.assertEqual(result, 0)\n        self.assertEqual(len(L), 3)\n        compare_to = L[-1].split()\n        expected = [\n            'foo', '/a/b',\n            'pyramid.tests.test_scripts.test_proutes.view1',\n            '<route', 'mismatch>'\n        ]\n>       self.assertEqual(compare_to, expected)\nE       AssertionError: Lists differ: ['foo', '/a/b', 'r2e_tests.test_scripts.test_proutes.view1[20 chars]ch>'] != ['foo', '/a/b', 'pyramid.tests.test_scripts.test_proutes.v[24 chars]ch>']\nE       \nE       First differing element 2:\nE       'r2e_tests.test_scripts.test_proutes.view1'\nE       'pyramid.tests.test_scripts.test_proutes.view1'\nE       \nE         ['foo',\nE          '/a/b',\nE       -  'r2e_tests.test_scripts.test_proutes.view1',\nE       ?    ^^^\nE       \nE       +  'pyramid.tests.test_scripts.test_proutes.view1',\nE       ?   ++ ^^^^^\nE       \nE          '<route',\nE          'mismatch>']\n\nr2e_tests/test_scripts/test_proutes.py:393: AssertionError\n__________________ TestPRoutesCommand.test_route_static_views __________________\n\nself = <r2e_tests.test_scripts.test_proutes.TestPRoutesCommand testMethod=test_route_static_views>\n\n    def test_route_static_views(self):\n        from pyramid.renderers import null_renderer as nr\n        config = self._makeConfig(autocommit=True)\n        config.add_static_view('static', 'static', cache_max_age=3600)\n        config.add_static_view(name='static2', path='/var/www/static')\n        config.add_static_view(\n            name='pyramid_scaffold',\n            path='pyramid:scaffolds/starter/+package+/static'\n        )\n    \n        command = self._makeOne()\n        L = []\n        command.out = L.append\n        command.bootstrap = (dummy.DummyBootstrap(registry=config.registry),)\n        result = command.run()\n        self.assertEqual(result, 0)\n        self.assertEqual(len(L), 5)\n    \n        expected = [\n            ['__static/', '/static/*subpath',\n             'pyramid.tests.test_scripts:static/', '*'],\n            ['__static2/', '/static2/*subpath', '/var/www/static/', '*'],\n            ['__pyramid_scaffold/', '/pyramid_scaffold/*subpath',\n             'pyramid:scaffolds/starter/+package+/static/',  '*'],\n        ]\n    \n        for index, line in enumerate(L[2:]):\n            data = line.split()\n>           self.assertEqual(data, expected[index])\nE           AssertionError: Lists differ: ['__static/', '/static/*subpath', 'r2e_tests.test_scripts:static/', '*'] != ['__static/', '/static/*subpath', 'pyramid.tests.test_scripts:static/', '*']\nE           \nE           First differing element 2:\nE           'r2e_tests.test_scripts:static/'\nE           'pyramid.tests.test_scripts:static/'\nE           \nE           - ['__static/', '/static/*subpath', 'r2e_tests.test_scripts:static/', '*']\nE           ?                                     ^^^\nE           \nE           + ['__static/', '/static/*subpath', 'pyramid.tests.test_scripts:static/', '*']\nE           ?                                    ++ ^^^^^\n\nr2e_tests/test_scripts/test_proutes.py:423: AssertionError\n___________ TestPRoutesCommand.test_single_route_one_view_registered ___________\n\nself = <r2e_tests.test_scripts.test_proutes.TestPRoutesCommand testMethod=test_single_route_one_view_registered>\n\n    def test_single_route_one_view_registered(self):\n        from zope.interface import Interface\n        from pyramid.interfaces import IRouteRequest\n        from pyramid.interfaces import IViewClassifier\n        from pyramid.interfaces import IView\n        registry = self._makeRegistry()\n    \n        def view():pass\n        class IMyRoute(Interface):\n            pass\n        registry.registerAdapter(view,\n                                 (IViewClassifier, IMyRoute, Interface),\n                                 IView, '')\n        registry.registerUtility(IMyRoute, IRouteRequest, name='a')\n        command = self._makeOne()\n        route = dummy.DummyRoute('a', '/a')\n        mapper = dummy.DummyMapper(route)\n        command._get_mapper = lambda *arg: mapper\n        L = []\n        command.out = L.append\n        command.bootstrap = (dummy.DummyBootstrap(registry=registry),)\n        result = command.run()\n        self.assertEqual(result, 0)\n        self.assertEqual(len(L), 3)\n        compare_to = L[-1].split()[:3]\n>       self.assertEqual(\n            compare_to,\n            ['a', '/a', 'pyramid.tests.test_scripts.test_proutes.view']\n        )\nE       AssertionError: Lists differ: ['a', '/a', 'r2e_tests.test_scripts.test_proutes.view'] != ['a', '/a', 'pyramid.tests.test_scripts.test_proutes.view']\nE       \nE       First differing element 2:\nE       'r2e_tests.test_scripts.test_proutes.view'\nE       'pyramid.tests.test_scripts.test_proutes.view'\nE       \nE       - ['a', '/a', 'r2e_tests.test_scripts.test_proutes.view']\nE       ?               ^^^\nE       \nE       + ['a', '/a', 'pyramid.tests.test_scripts.test_proutes.view']\nE       ?              ++ ^^^^^\n\nr2e_tests/test_scripts/test_proutes.py:155: AssertionError\n______________________ TestPRoutesCommand.test_view_glob _______________________\n\nself = <r2e_tests.test_scripts.test_proutes.TestPRoutesCommand testMethod=test_view_glob>\n\n    def test_view_glob(self):\n        from pyramid.renderers import null_renderer as nr\n        from pyramid.config import not_\n    \n        def view1(context, request): return 'view1'\n        def view2(context, request): return 'view2'\n    \n        config = self._makeConfig(autocommit=True)\n        config.add_route('foo', '/a/b')\n        config.add_view(\n            route_name='foo',\n            view=view1,\n            renderer=nr,\n            request_method=not_('POST')\n        )\n    \n        config.add_route('bar', '/b/a')\n        config.add_view(\n            route_name='bar',\n            view=view2,\n            renderer=nr,\n            request_method=not_('POST')\n        )\n    \n        command = self._makeOne()\n        command.options.glob = '*foo*'\n    \n        L = []\n        command.out = L.append\n        command.bootstrap = (dummy.DummyBootstrap(registry=config.registry),)\n        result = command.run()\n        self.assertEqual(result, 0)\n        self.assertEqual(len(L), 3)\n        compare_to = L[-1].split()\n        expected = [\n            'foo', '/a/b',\n            'pyramid.tests.test_scripts.test_proutes.view1',\n            '!POST,*'\n        ]\n>       self.assertEqual(compare_to, expected)\nE       AssertionError: Lists differ: ['foo', '/a/b', 'r2e_tests.test_scripts.test_proutes.view1', '!POST,*'] != ['foo', '/a/b', 'pyramid.tests.test_scripts.test_proutes.view1', '!POST,*']\nE       \nE       First differing element 2:\nE       'r2e_tests.test_scripts.test_proutes.view1'\nE       'pyramid.tests.test_scripts.test_proutes.view1'\nE       \nE       - ['foo', '/a/b', 'r2e_tests.test_scripts.test_proutes.view1', '!POST,*']\nE       ?                   ^^^\nE       \nE       + ['foo', '/a/b', 'pyramid.tests.test_scripts.test_proutes.view1', '!POST,*']\nE       ?                  ++ ^^^^^\n\nr2e_tests/test_scripts/test_proutes.py:574: AssertionError\n_____________ TestPRoutesCommand.test_view_request_method_not_post _____________\n\nself = <r2e_tests.test_scripts.test_proutes.TestPRoutesCommand testMethod=test_view_request_method_not_post>\n\n    def test_view_request_method_not_post(self):\n        from pyramid.renderers import null_renderer as nr\n        from pyramid.config import not_\n    \n        def view1(context, request): return 'view1'\n    \n        config = self._makeConfig(autocommit=True)\n        config.add_route('foo', '/a/b')\n        config.add_view(\n            route_name='foo',\n            view=view1,\n            renderer=nr,\n            request_method=not_('POST')\n        )\n    \n        command = self._makeOne()\n        L = []\n        command.out = L.append\n        command.bootstrap = (dummy.DummyBootstrap(registry=config.registry),)\n        result = command.run()\n        self.assertEqual(result, 0)\n        self.assertEqual(len(L), 3)\n        compare_to = L[-1].split()\n        expected = [\n            'foo', '/a/b',\n            'pyramid.tests.test_scripts.test_proutes.view1',\n            '!POST,*'\n        ]\n>       self.assertEqual(compare_to, expected)\nE       AssertionError: Lists differ: ['foo', '/a/b', 'r2e_tests.test_scripts.test_proutes.view1', '!POST,*'] != ['foo', '/a/b', 'pyramid.tests.test_scripts.test_proutes.view1', '!POST,*']\nE       \nE       First differing element 2:\nE       'r2e_tests.test_scripts.test_proutes.view1'\nE       'pyramid.tests.test_scripts.test_proutes.view1'\nE       \nE       - ['foo', '/a/b', 'r2e_tests.test_scripts.test_proutes.view1', '!POST,*']\nE       ?                   ^^^\nE       \nE       + ['foo', '/a/b', 'pyramid.tests.test_scripts.test_proutes.view1', '!POST,*']\nE       ?                  ++ ^^^^^\n\nr2e_tests/test_scripts/test_proutes.py:533: 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: 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:296: AssertionError\n==================================== PASSES ====================================\n=========================== short test summary info ============================\nPASSED r2e_tests/test_1.py::Test_get_app::test_it\nPASSED r2e_tests/test_1.py::Test_get_app::test_it_with_dummyapp_requiring_options\nPASSED r2e_tests/test_1.py::Test_get_app::test_it_with_hash\nPASSED r2e_tests/test_1.py::Test_get_app::test_it_with_hash_and_name_override\nPASSED r2e_tests/test_1.py::Test_get_app::test_it_with_options\nPASSED r2e_tests/test_1.py::Test_get_appsettings::test_it\nPASSED r2e_tests/test_1.py::Test_get_appsettings::test_it_with_dummyapp_requiring_options\nPASSED r2e_tests/test_1.py::Test_get_appsettings::test_it_with_hash\nPASSED r2e_tests/test_1.py::Test_get_appsettings::test_it_with_hash_and_name_override\nPASSED r2e_tests/test_1.py::Test_bootstrap::test_it_request_with_registry\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_subscriber_predicate\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_subscriber_with_default_type_predicates_False\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_subscriber_with_default_type_predicates_True\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_subscriber_with_specific_type_and_predicates_False\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_subscriber_with_specific_type_and_predicates_True\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_adapters.py::Test_eventonly::test_defaults\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_absdirectory\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_directory_with_absfile\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_file_with_absdirectory\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_file_with_absfile\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_missing_abspath\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_absdirectory\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_class_conforms_to_IPEP302Loader\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_class_conforms_to_IPackageOverrides\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_filtered_sources\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_get_code_pkg_has___loader__\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_get_code_pkg_has_no___loader__\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_get_data_pkg_has___loader__\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_get_data_pkg_has_no___loader__\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_get_filename\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_source_pkg_has___loader__\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_get_source_pkg_has_no___loader__\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_instance_conforms_to_IPEP302Loader\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_instance_conforms_to_IPackageOverrides\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_is_package_pkg_has___loader__\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_is_package_pkg_has_no___loader__\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::TestPackageAssetSource::test_exists\nPASSED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_exists_file_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_exists_with_prefix\nPASSED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_get_filename_file_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_get_stream\nPASSED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_get_stream_file_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_get_stream_with_prefix\nPASSED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_get_string\nPASSED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_get_string_file_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_get_string_with_prefix\nPASSED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_isdir_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_isdir_false\nPASSED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_isdir_true\nPASSED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_listdir\nPASSED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_listdir_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_exists\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_exists_file_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_exists_with_prefix\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_get_filename\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_get_filename_file_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_get_filename_with_prefix\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_get_stream\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_get_stream_file_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_get_stream_with_prefix\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_get_string\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_get_string_file_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_get_string_with_prefix\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_isdir_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_isdir_false\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_isdir_true\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_listdir\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_listdir_doesnt_exist\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_add_request_method_with_None_callable\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_add_request_method_with_None_callable_and_no_name\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_add_request_method_with_None_callable_conflict\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_add_request_method_with_callable\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_add_request_method_with_text_type_name\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_add_request_method_with_unnamed_callable\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_multiple_request_methods_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_response_factory\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_response_factory_dottedname\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_factories.py::TestDeprecatedFactoriesMixinMethods::test_set_multiple_request_properties\nPASSED r2e_tests/test_config/test_factories.py::TestDeprecatedFactoriesMixinMethods::test_set_multiple_request_properties_conflict\nPASSED r2e_tests/test_config/test_factories.py::TestDeprecatedFactoriesMixinMethods::test_set_request_property_with_callable\nPASSED r2e_tests/test_config/test_factories.py::TestDeprecatedFactoriesMixinMethods::test_set_request_property_with_property\nPASSED r2e_tests/test_config/test_factories.py::TestDeprecatedFactoriesMixinMethods::test_set_request_property_with_unnamed_callable\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_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_adds__lock\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test__fix_registry_adds_clear_view_lookup_cache\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_default_webob_response_adapter_registered\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_views\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_registers_default_view_predicates\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_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_response_factory\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::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::TestConfigurator__add_predicate::test_factory_as_object\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::TestActionState::test_reentrant_action\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_reentrant_action_error\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_reentrant_action_without_clear\nPASSED r2e_tests/test_config/test_init.py::Test_reentrant_action_functional::test_functional\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_predicates.py::TestXHRPredicate::test___call___false\nPASSED r2e_tests/test_config/test_predicates.py::TestXHRPredicate::test___call___true\nPASSED r2e_tests/test_config/test_predicates.py::TestXHRPredicate::test_phash\nPASSED r2e_tests/test_config/test_predicates.py::TestXHRPredicate::test_text\nPASSED r2e_tests/test_config/test_predicates.py::TestRequestMethodPredicate::test___call___false\nPASSED r2e_tests/test_config/test_predicates.py::TestRequestMethodPredicate::test___call___true_multi\nPASSED r2e_tests/test_config/test_predicates.py::TestRequestMethodPredicate::test___call___true_single\nPASSED r2e_tests/test_config/test_predicates.py::TestRequestMethodPredicate::test_ctor_get_but_no_head\nPASSED r2e_tests/test_config/test_predicates.py::TestRequestMethodPredicate::test_phash\nPASSED r2e_tests/test_config/test_predicates.py::TestRequestMethodPredicate::test_text\nPASSED r2e_tests/test_config/test_predicates.py::TestPathInfoPredicate::test___call___false\nPASSED r2e_tests/test_config/test_predicates.py::TestPathInfoPredicate::test___call___true\nPASSED r2e_tests/test_config/test_predicates.py::TestPathInfoPredicate::test_ctor_compilefail\nPASSED r2e_tests/test_config/test_predicates.py::TestPathInfoPredicate::test_phash\nPASSED r2e_tests/test_config/test_predicates.py::TestPathInfoPredicate::test_text\nPASSED r2e_tests/test_config/test_predicates.py::TestRequestParamPredicate::test___call___false\nPASSED r2e_tests/test_config/test_predicates.py::TestRequestParamPredicate::test___call___false_multi\nPASSED r2e_tests/test_config/test_predicates.py::TestRequestParamPredicate::test___call___true_exists\nPASSED r2e_tests/test_config/test_predicates.py::TestRequestParamPredicate::test___call___true_multi\nPASSED r2e_tests/test_config/test_predicates.py::TestRequestParamPredicate::test___call___true_withval\nPASSED r2e_tests/test_config/test_predicates.py::TestRequestParamPredicate::test_phash_exists\nPASSED r2e_tests/test_config/test_predicates.py::TestRequestParamPredicate::test_phash_exists_equal_sign\nPASSED r2e_tests/test_config/test_predicates.py::TestRequestParamPredicate::test_phash_withval\nPASSED r2e_tests/test_config/test_predicates.py::TestRequestParamPredicate::test_text_exists\nPASSED r2e_tests/test_config/test_predicates.py::TestRequestParamPredicate::test_text_exists_equal_sign\nPASSED r2e_tests/test_config/test_predicates.py::TestRequestParamPredicate::test_text_multi\nPASSED r2e_tests/test_config/test_predicates.py::TestRequestParamPredicate::test_text_multi_equal_sign\nPASSED r2e_tests/test_config/test_predicates.py::TestRequestParamPredicate::test_text_withval\nPASSED r2e_tests/test_config/test_predicates.py::TestMatchParamPredicate::test___call___false\nPASSED r2e_tests/test_config/test_predicates.py::TestMatchParamPredicate::test___call___matchdict_is_None\nPASSED r2e_tests/test_config/test_predicates.py::TestMatchParamPredicate::test___call___true_multi\nPASSED r2e_tests/test_config/test_predicates.py::TestMatchParamPredicate::test___call___true_single\nPASSED r2e_tests/test_config/test_predicates.py::TestMatchParamPredicate::test_phash\nPASSED r2e_tests/test_config/test_predicates.py::TestMatchParamPredicate::test_text\nPASSED r2e_tests/test_config/test_predicates.py::TestCustomPredicate::test___call___false\nPASSED r2e_tests/test_config/test_predicates.py::TestCustomPredicate::test___call___true\nPASSED r2e_tests/test_config/test_predicates.py::TestCustomPredicate::test_phash\nPASSED r2e_tests/test_config/test_predicates.py::TestCustomPredicate::test_text_func_has___text__\nPASSED r2e_tests/test_config/test_predicates.py::TestCustomPredicate::test_text_func_repr\nPASSED r2e_tests/test_config/test_predicates.py::TestTraversePredicate::test___call__traverse_has_remainder_already\nPASSED r2e_tests/test_config/test_predicates.py::TestTraversePredicate::test___call__traverse_matches\nPASSED r2e_tests/test_config/test_predicates.py::TestTraversePredicate::test___call__traverse_matches_with_highorder_chars\nPASSED r2e_tests/test_config/test_predicates.py::TestTraversePredicate::test_phash\nPASSED r2e_tests/test_config/test_predicates.py::TestTraversePredicate::test_text\nPASSED r2e_tests/test_config/test_predicates.py::Test_CheckCSRFTokenPredicate::test_it_call_val_False\nPASSED r2e_tests/test_config/test_predicates.py::Test_CheckCSRFTokenPredicate::test_it_call_val_True\nPASSED r2e_tests/test_config/test_predicates.py::Test_CheckCSRFTokenPredicate::test_it_call_val_str\nPASSED r2e_tests/test_config/test_predicates.py::Test_CheckCSRFTokenPredicate::test_phash\nPASSED r2e_tests/test_config/test_predicates.py::Test_CheckCSRFTokenPredicate::test_text\nPASSED r2e_tests/test_config/test_predicates.py::TestHeaderPredicate::test___call___false\nPASSED r2e_tests/test_config/test_predicates.py::TestHeaderPredicate::test___call___false_withregex\nPASSED r2e_tests/test_config/test_predicates.py::TestHeaderPredicate::test___call___true_exists\nPASSED r2e_tests/test_config/test_predicates.py::TestHeaderPredicate::test___call___true_withregex\nPASSED r2e_tests/test_config/test_predicates.py::TestHeaderPredicate::test___call___true_withval\nPASSED r2e_tests/test_config/test_predicates.py::TestHeaderPredicate::test_phash_exists\nPASSED r2e_tests/test_config/test_predicates.py::TestHeaderPredicate::test_phash_withregex\nPASSED r2e_tests/test_config/test_predicates.py::TestHeaderPredicate::test_phash_withval\nPASSED r2e_tests/test_config/test_predicates.py::TestHeaderPredicate::test_text_exists\nPASSED r2e_tests/test_config/test_predicates.py::TestHeaderPredicate::test_text_withregex\nPASSED r2e_tests/test_config/test_predicates.py::TestHeaderPredicate::test_text_withval\nPASSED r2e_tests/test_config/test_predicates.py::Test_PhysicalPathPredicate::test_it_call_False\nPASSED r2e_tests/test_config/test_predicates.py::Test_PhysicalPathPredicate::test_it_call_context_has_no_name\nPASSED r2e_tests/test_config/test_predicates.py::Test_PhysicalPathPredicate::test_it_call_val_list_True\nPASSED r2e_tests/test_config/test_predicates.py::Test_PhysicalPathPredicate::test_it_call_val_str_True\nPASSED r2e_tests/test_config/test_predicates.py::Test_PhysicalPathPredicate::test_it_call_val_tuple_True\nPASSED r2e_tests/test_config/test_predicates.py::Test_PhysicalPathPredicate::test_phash\nPASSED r2e_tests/test_config/test_predicates.py::Test_PhysicalPathPredicate::test_text\nPASSED r2e_tests/test_config/test_predicates.py::Test_EffectivePrincipalsPredicate::test_it_call_authentication_policy_doesnt_provide_superset\nPASSED r2e_tests/test_config/test_predicates.py::Test_EffectivePrincipalsPredicate::test_it_call_authentication_policy_provides_superset\nPASSED r2e_tests/test_config/test_predicates.py::Test_EffectivePrincipalsPredicate::test_it_call_authentication_policy_provides_superset_implicit\nPASSED r2e_tests/test_config/test_predicates.py::Test_EffectivePrincipalsPredicate::test_it_call_no_authentication_policy\nPASSED r2e_tests/test_config/test_predicates.py::Test_EffectivePrincipalsPredicate::test_phash\nPASSED r2e_tests/test_config/test_predicates.py::Test_EffectivePrincipalsPredicate::test_text\nPASSED r2e_tests/test_config/test_predicates.py::Test_EffectivePrincipalsPredicate::test_text_noniter\nPASSED r2e_tests/test_config/test_rendering.py::TestRenderingConfiguratorMixin::test_add_default_renderers\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_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_add_permission\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_None\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_cachebust\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_testing.py::TestingConfiguratorMixinTests::test_testing_securitypolicy_forget_result\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_securitypolicy_remember_result\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_util.py::TestPredicateList::test_custom_predicates_can_affect_traversal\nPASSED r2e_tests/test_config/test_util.py::TestPredicateList::test_different_custom_predicates_with_same_hash\nPASSED r2e_tests/test_config/test_util.py::TestPredicateList::test_match_param_from_dict\nPASSED r2e_tests/test_config/test_util.py::TestPredicateList::test_match_param_from_dict_fails\nPASSED r2e_tests/test_config/test_util.py::TestPredicateList::test_match_param_from_string\nPASSED r2e_tests/test_config/test_util.py::TestPredicateList::test_match_param_from_string_fails\nPASSED r2e_tests/test_config/test_util.py::TestPredicateList::test_notted\nPASSED r2e_tests/test_config/test_util.py::TestPredicateList::test_ordering_importance_and_number\nPASSED r2e_tests/test_config/test_util.py::TestPredicateList::test_ordering_importance_of_predicates\nPASSED r2e_tests/test_config/test_util.py::TestPredicateList::test_ordering_number_of_predicates\nPASSED r2e_tests/test_config/test_util.py::TestPredicateList::test_ordering_xhr_and_request_method_trump_only_containment\nPASSED r2e_tests/test_config/test_util.py::TestPredicateList::test_predicate_text_is_correct\nPASSED r2e_tests/test_config/test_util.py::TestPredicateList::test_request_method_ordering_hashes_same\nPASSED r2e_tests/test_config/test_util.py::TestPredicateList::test_request_method_sequence\nPASSED r2e_tests/test_config/test_util.py::TestPredicateList::test_traverse_has_remainder_already\nPASSED r2e_tests/test_config/test_util.py::TestPredicateList::test_traverse_matches\nPASSED r2e_tests/test_config/test_util.py::TestPredicateList::test_traverse_matches_with_highorder_chars\nPASSED r2e_tests/test_config/test_util.py::TestPredicateList::test_unknown_predicate\nPASSED r2e_tests/test_config/test_util.py::Test_takes_one_arg::test_function_annotations\nPASSED r2e_tests/test_config/test_util.py::Test_takes_one_arg::test_function_defaultargs_firstname_not_request\nPASSED r2e_tests/test_config/test_util.py::Test_takes_one_arg::test_function_defaultargs_firstname_request\nPASSED r2e_tests/test_config/test_util.py::Test_takes_one_arg::test_function_noargs\nPASSED r2e_tests/test_config/test_util.py::Test_takes_one_arg::test_function_onearg_named_request\nPASSED r2e_tests/test_config/test_util.py::Test_takes_one_arg::test_function_onearg_named_somethingelse\nPASSED r2e_tests/test_config/test_util.py::Test_takes_one_arg::test_function_toomanyargs\nPASSED r2e_tests/test_config/test_util.py::Test_takes_one_arg::test_function_with_attr_false\nPASSED r2e_tests/test_config/test_util.py::Test_takes_one_arg::test_function_with_attr_true\nPASSED r2e_tests/test_config/test_util.py::Test_takes_one_arg::test_instance_defaultargs_firstname_not_request\nPASSED r2e_tests/test_config/test_util.py::Test_takes_one_arg::test_instance_defaultargs_firstname_request\nPASSED r2e_tests/test_config/test_util.py::Test_takes_one_arg::test_instance_defaultargs_onearg_named_request\nPASSED r2e_tests/test_config/test_util.py::Test_takes_one_arg::test_instance_defaultargs_onearg_named_somethingelse\nPASSED r2e_tests/test_config/test_util.py::Test_takes_one_arg::test_instance_nocall\nPASSED r2e_tests/test_config/test_util.py::Test_takes_one_arg::test_instance_toomanyargs\nPASSED r2e_tests/test_config/test_util.py::Test_takes_one_arg::test_method_onearg_named_request\nPASSED r2e_tests/test_config/test_util.py::Test_takes_one_arg::test_newstyle_class_init_defaultargs_firstname_not_request\nPASSED r2e_tests/test_config/test_util.py::Test_takes_one_arg::test_newstyle_class_init_defaultargs_firstname_request\nPASSED r2e_tests/test_config/test_util.py::Test_takes_one_arg::test_newstyle_class_init_firstname_request_with_secondname\nPASSED r2e_tests/test_config/test_util.py::Test_takes_one_arg::test_newstyle_class_init_noargs\nPASSED r2e_tests/test_config/test_util.py::Test_takes_one_arg::test_newstyle_class_init_onearg_named_somethingelse\nPASSED r2e_tests/test_config/test_util.py::Test_takes_one_arg::test_oldstyle_class_init_defaultargs_firstname_not_request\nPASSED r2e_tests/test_config/test_util.py::Test_takes_one_arg::test_oldstyle_class_init_defaultargs_firstname_request\nPASSED r2e_tests/test_config/test_util.py::Test_takes_one_arg::test_oldstyle_class_init_noargs\nPASSED r2e_tests/test_config/test_util.py::Test_takes_one_arg::test_oldstyle_class_init_onearg_named_request\nPASSED r2e_tests/test_config/test_util.py::Test_takes_one_arg::test_oldstyle_class_init_onearg_named_somethingelse\nPASSED r2e_tests/test_config/test_util.py::Test_takes_one_arg::test_oldstyle_class_init_toomanyargs\nPASSED r2e_tests/test_config/test_util.py::Test_takes_one_arg::test_oldstyle_class_no_init\nPASSED r2e_tests/test_config/test_util.py::Test_takes_one_arg::test_requestonly_newstyle_class_init_onearg_named_request\nPASSED r2e_tests/test_config/test_util.py::Test_takes_one_arg::test_requestonly_newstyle_class_init_toomanyargs\nPASSED r2e_tests/test_config/test_util.py::Test_takes_one_arg::test_requestonly_newstyle_class_no_init\nPASSED r2e_tests/test_config/test_util.py::TestNotted::test_it_with_phash_val\nPASSED r2e_tests/test_config/test_util.py::TestNotted::test_it_without_phash_val\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_allows_other_predicates\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_forbidden_view_disallows_context\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_forbidden_view_disallows_for_\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_forbidden_view_disallows_http_cache\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_forbidden_view_disallows_name\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_forbidden_view_disallows_permission\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_forbidden_view_no_view_argument\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_forbidden_view_with_view_defaults\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_allows_other_predicates\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_append_slash_custom_response\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_notfound_view_disallows_context\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_notfound_view_disallows_for_\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_notfound_view_disallows_http_cache\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_notfound_view_disallows_name\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_notfound_view_disallows_permission\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_notfound_view_no_view_argument\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_notfound_view_with_view_defaults\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_class_method_no_attr\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_mixed_case_replaces_existing_view\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_decorator_tuple\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_tmpl_renderer_factory_introspector_missing\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_tmpl_renderer_factory_no_renderer_factory\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_tmpl_renderer_factory_with_renderer_factory\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::TestViewsConfigurationMixin::test_view_with_most_specific_predicate\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_view_with_most_specific_predicate_with_mismatch\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_defaults\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_otherattr\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_add_with_phash_override_accept2\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_function_returns_true_Response_no_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_function_returns_true_Response_with_renderer\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_exception_has_text_in_detail\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_cachebust_prevented\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_cachebuster\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_cachebuster_abspath\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_cachebuster_for_more_specific_path\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_cachebuster_overwrite\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_cachebuster_overwrite_explicit\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_package_root\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_noscheme\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_context\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_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_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_cachebust\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_url_cachebust_abspath\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_url_cachebust_nomatch\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_generate_url_with_custom_anchor\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_url_with_custom_query\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_common.py::TestParseVars::test_parse_vars_bad\nPASSED r2e_tests/test_scripts/test_common.py::TestParseVars::test_parse_vars_good\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_confirm_override_conflicting_name\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_force_override_conflicting_name\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_force_override_site_name\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_known_scaffold_with_path_as_project_target_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_no_scaffold_no_args\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_scaffold_with_dev_pyramid_long_version\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_scaffold_with_dev_pyramid_version\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_scaffold_with_hyphen_in_project_name\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_scaffold_with_prod_pyramid_long_version\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_scaffold_with_prod_pyramid_unparsable_version\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_scaffold_with_prod_pyramid_version\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_pdistreport.py::TestPDistReportCommand::test_no_dists\nPASSED r2e_tests/test_scripts/test_pdistreport.py::TestPDistReportCommand::test_with_dists\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_method_configures_logging\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_bad_args\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_bad_format\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_good_args\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_good_format\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_as_wsgiapp\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_route_no_view\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_multiview_registered\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_with_factory\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_static_routes_included_in_list\nPASSED r2e_tests/test_scripts/test_proutes.py::Test_main::test_it\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_get_options_no_command\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_get_options_with_command\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_default_shell_option\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_errors_with_unknown_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_ipython\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_loads_pythonstartup\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_list_shells\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_shell_entry_points\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_shell_ordering\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_shell_override\nPASSED r2e_tests/test_scripts/test_pshell.py::Test_python_shell_runner::test_it\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::Test_setup_logging::test_it_global_conf_empty - T...\nFAILED r2e_tests/test_1.py::Test_setup_logging::test_it_global_conf_not_empty\nFAILED r2e_tests/test_1.py::Test_setup_logging::test_it_no_global_conf - Type...\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::TestAssetsConfiguratorMixin::test_override_asset_directory_with_directory\nFAILED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_directory_with_package\nFAILED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_file_with_file\nFAILED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_package_with_directory\nFAILED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_package_with_package\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::TestPackageAssetSource::test_get_filename\nFAILED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_get_filename_with_prefix\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_include_constant_root_package\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_add_directive_with_custom_callable\nFAILED r2e_tests/test_config/test_init.py::TestConfigurator_add_directive::test_add_directive_with_partial\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_init.py::TestConfigurator__add_predicate::test_factory_as_dotted_name\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::TestStaticURLInfo::test_generate_url_cachebust_with_overrides\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_options\nFAILED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_method_patch\nFAILED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_method_post\nFAILED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_method_propfind\nFAILED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_method_put\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_w_basic_auth\nFAILED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_with_query_string\nFAILED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_config_format_ini_commas\nFAILED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_config_format_ini_newlines\nFAILED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_config_format_ini_spaces\nFAILED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_one_route_all_methods_view_only_post\nFAILED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_one_route_only_post_view_all_methods\nFAILED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_one_route_only_post_view_post_and_get\nFAILED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_one_route_with_long_name_one_view_registered\nFAILED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_route_is_get_view_request_method_not_post\nFAILED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_route_request_method_mismatch\nFAILED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_route_static_views\nFAILED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_single_route_one_view_registered\nFAILED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_view_glob\nFAILED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_view_request_method_not_post\nFAILED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_single_view_function_traversal\n======================== 68 failed, 893 passed in 4.89s ========================\n",
    "old_commit_res_stderr": ""
}
CHANGES.txt docs/api/paster.rst pyramid/paster.py pyramid/scripts/pserve.py pyramid/tests/test_paster.py
We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
[ISSUE]
**Title:** `setup_logging()` Raises TypeError When `global_conf` is Passed

**Description:**
When attempting to pass the `global_conf` parameter to the `setup_logging()` function, a `TypeError` is raised because the function does not accept this keyword argument.

**Example Buggy Code:**
```python
from pyramid.paster import setup_logging

config_file = '/abc'
global_conf = {'key': 'val'}
setup_logging(config_file, global_conf=global_conf)
```

**Expected Behavior:**
The `setup_logging()` function should accept the `global_conf` argument and properly incorporate the provided configuration without any errors.

**Actual Behavior:**
A `TypeError` is thrown with the message:
```
TypeError: setup_logging() got an unexpected keyword argument 'global_conf'
```
[/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/paster.py
import os

from paste.deploy import (
    loadapp,
    appconfig,
    )

from pyramid.compat import configparser
from logging.config import fileConfig
from pyramid.scripting import prepare

def get_app(config_uri, name=None, options=None, loadapp=loadapp):
    """ Return the WSGI application named ``name`` in the PasteDeploy
    config file specified by ``config_uri``.

    ``options``, if passed, should be a dictionary used as variable assignments
    like ``{'http_port': 8080}``.  This is useful if e.g. ``%(http_port)s`` is
    used in the config file.

    If the ``name`` is None, this will attempt to parse the name from
    the ``config_uri`` string expecting the format ``inifile#name``.
    If no name is found, the name will default to "main"."""
    path, section = _getpathsec(config_uri, name)
    config_name = 'config:%s' % path
    here_dir = os.getcwd()

    app = loadapp(
        config_name,
        name=section,
        relative_to=here_dir,
        global_conf=options)

    return app

def get_appsettings(config_uri, name=None, options=None, appconfig=appconfig):
    """ Return a dictionary representing the key/value pairs in an ``app``
    section within the file represented by ``config_uri``.

    ``options``, if passed, should be a dictionary used as variable assignments
    like ``{'http_port': 8080}``.  This is useful if e.g. ``%(http_port)s`` is
    used in the config file.

    If the ``name`` is None, this will attempt to parse the name from
    the ``config_uri`` string expecting the format ``inifile#name``.
    If no name is found, the name will default to "main"."""
    path, section = _getpathsec(config_uri, name)
    config_name = 'config:%s' % path
    here_dir = os.getcwd()
    return appconfig(
        config_name,
        name=section,
        relative_to=here_dir,
        global_conf=options)

def setup_logging(config_uri, fileConfig=fileConfig,
                  configparser=configparser):
    """
    Set up logging via the logging module's fileConfig function with the
    filename specified via ``config_uri`` (a string in the form
    ``filename#sectionname``).

    ConfigParser defaults are specified for the special ``__file__``
    and ``here`` variables, similar to PasteDeploy config loading.
    """
    path, _ = _getpathsec(config_uri, None)
    parser = configparser.ConfigParser()
    parser.read([path])
    if parser.has_section('loggers'):
        config_file = os.path.abspath(path)
        return fileConfig(
            config_file,
            dict(__file__=config_file, here=os.path.dirname(config_file))
            )

def _getpathsec(config_uri, name):
    if '#' in config_uri:
        path, section = config_uri.split('#', 1)
    else:
        path, section = config_uri, 'main'
    if name:
        section = name
    return path, section

def bootstrap(config_uri, request=None, options=None):
    """ Load a WSGI application from the PasteDeploy config file specified
    by ``config_uri``. The environment will be configured as if it is
    currently serving ``request``, leaving a natural environment in place
    to write scripts that can generate URLs and utilize renderers.

    This function returns a dictionary with ``app``, ``root``, ``closer``,
    ``request``, and ``registry`` keys.  ``app`` is the WSGI app loaded
    (based on the ``config_uri``), ``root`` is the traversal root resource
    of the Pyramid application, and ``closer`` is a parameterless callback
    that may be called when your script is complete (it pops a threadlocal
    stack).

    .. note::

       Most operations within :app:`Pyramid` expect to be invoked within the
       context of a WSGI request, thus it's important when loading your
       application to anchor it when executing scripts and other code that is
       not normally invoked during active WSGI requests.

    .. note::

       For a complex config file containing multiple :app:`Pyramid`
       applications, this function will setup the environment under the context
       of the last-loaded :app:`Pyramid` application. You may load a specific
       application yourself by using the lower-level functions
       :meth:`pyramid.paster.get_app` and :meth:`pyramid.scripting.prepare` in
       conjunction with :attr:`pyramid.config.global_registries`.

    ``config_uri`` -- specifies the PasteDeploy config file to use for the
    interactive shell. The format is ``inifile#name``. If the name is left
    off, ``main`` will be assumed.

    ``request`` -- specified to anchor the script to a given set of WSGI
    parameters. For example, most people would want to specify the host,
    scheme and port such that their script will generate URLs in relation
    to those parameters. A request with default parameters is constructed
    for you if none is provided. You can mutate the request's ``environ``
    later to setup a specific host/port/scheme/etc.

    ``options`` Is passed to get_app for use as variable assignments like 
    {'http_port': 8080} and then use %(http_port)s in the
    config file.

    See :ref:`writing_a_script` for more information about how to use this
    function.
    """
    app = get_app(config_uri, options=options)
    env = prepare(request)
    env['app'] = app
    return env


```
--- 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:** `setup_logging()` Raises TypeError When `global_conf` is Passed

**Description:**
When attempting to pass the `global_conf` parameter to the `setup_logging()` function, a `TypeError` is raised because the function does not accept this keyword argument.

**Example Buggy Code:**
```python
from pyramid.paster import setup_logging

config_file = '/abc'
global_conf = {'key': 'val'}
setup_logging(config_file, global_conf=global_conf)
```

**Expected Behavior:**
The `setup_logging()` function should accept the `global_conf` argument and properly incorporate the provided configuration without any errors.

**Actual Behavior:**
A `TypeError` is thrown with the message:
```
TypeError: setup_logging() got an unexpected keyword argument 'global_conf'
```
[/ISSUE]
{
    "Test_get_app.test_it": "PASSED",
    "Test_get_app.test_it_with_dummyapp_requiring_options": "PASSED",
    "Test_get_app.test_it_with_hash": "PASSED",
    "Test_get_app.test_it_with_hash_and_name_override": "PASSED",
    "Test_get_app.test_it_with_options": "PASSED",
    "Test_get_appsettings.test_it": "PASSED",
    "Test_get_appsettings.test_it_with_dummyapp_requiring_options": "PASSED",
    "Test_get_appsettings.test_it_with_hash": "PASSED",
    "Test_get_appsettings.test_it_with_hash_and_name_override": "PASSED",
    "Test_setup_logging.test_it_global_conf_empty": "PASSED",
    "Test_setup_logging.test_it_global_conf_not_empty": "PASSED",
    "Test_setup_logging.test_it_no_global_conf": "PASSED",
    "Test_bootstrap.test_it_request_with_registry": "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_subscriber_predicate": "PASSED",
    "AdaptersConfiguratorMixinTests.test_add_subscriber_with_default_type_predicates_False": "PASSED",
    "AdaptersConfiguratorMixinTests.test_add_subscriber_with_default_type_predicates_True": "PASSED",
    "AdaptersConfiguratorMixinTests.test_add_subscriber_with_specific_type_and_predicates_False": "PASSED",
    "AdaptersConfiguratorMixinTests.test_add_subscriber_with_specific_type_and_predicates_True": "PASSED",
    "AdaptersConfiguratorMixinTests.test_add_traverser_default_iface_means_Interface": "PASSED",
    "AdaptersConfiguratorMixinTests.test_add_traverser_introspectables": "PASSED",
    "AdaptersConfiguratorMixinTests.test_add_traverser_nondefault_iface": "PASSED",
    "Test_eventonly.test_defaults": "PASSED",
    "TestAssetsConfiguratorMixin.test__override_already_registered": "PASSED",
    "TestAssetsConfiguratorMixin.test__override_not_yet_registered": "PASSED",
    "TestAssetsConfiguratorMixin.test_override_asset_directory_with_absdirectory": "PASSED",
    "TestAssetsConfiguratorMixin.test_override_asset_directory_with_absfile": "PASSED",
    "TestAssetsConfiguratorMixin.test_override_asset_directory_with_file": "PASSED",
    "TestAssetsConfiguratorMixin.test_override_asset_file_with_absdirectory": "PASSED",
    "TestAssetsConfiguratorMixin.test_override_asset_file_with_absfile": "PASSED",
    "TestAssetsConfiguratorMixin.test_override_asset_file_with_directory": "PASSED",
    "TestAssetsConfiguratorMixin.test_override_asset_file_with_missing_abspath": "PASSED",
    "TestAssetsConfiguratorMixin.test_override_asset_file_with_package": "PASSED",
    "TestAssetsConfiguratorMixin.test_override_asset_package_with_absdirectory": "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_class_conforms_to_IPEP302Loader": "PASSED",
    "TestPackageOverrides.test_class_conforms_to_IPackageOverrides": "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_filtered_sources": "PASSED",
    "TestPackageOverrides.test_get_code_pkg_has___loader__": "PASSED",
    "TestPackageOverrides.test_get_code_pkg_has_no___loader__": "PASSED",
    "TestPackageOverrides.test_get_data_pkg_has___loader__": "PASSED",
    "TestPackageOverrides.test_get_data_pkg_has_no___loader__": "PASSED",
    "TestPackageOverrides.test_get_filename": "PASSED",
    "TestPackageOverrides.test_get_filename_file_doesnt_exist": "PASSED",
    "TestPackageOverrides.test_get_source_pkg_has___loader__": "PASSED",
    "TestPackageOverrides.test_get_source_pkg_has_no___loader__": "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_instance_conforms_to_IPEP302Loader": "PASSED",
    "TestPackageOverrides.test_instance_conforms_to_IPackageOverrides": "PASSED",
    "TestPackageOverrides.test_is_package_pkg_has___loader__": "PASSED",
    "TestPackageOverrides.test_is_package_pkg_has_no___loader__": "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",
    "TestPackageAssetSource.test_exists": "PASSED",
    "TestPackageAssetSource.test_exists_file_doesnt_exist": "PASSED",
    "TestPackageAssetSource.test_exists_with_prefix": "PASSED",
    "TestPackageAssetSource.test_get_filename_file_doesnt_exist": "PASSED",
    "TestPackageAssetSource.test_get_stream": "PASSED",
    "TestPackageAssetSource.test_get_stream_file_doesnt_exist": "PASSED",
    "TestPackageAssetSource.test_get_stream_with_prefix": "PASSED",
    "TestPackageAssetSource.test_get_string": "PASSED",
    "TestPackageAssetSource.test_get_string_file_doesnt_exist": "PASSED",
    "TestPackageAssetSource.test_get_string_with_prefix": "PASSED",
    "TestPackageAssetSource.test_isdir_doesnt_exist": "PASSED",
    "TestPackageAssetSource.test_isdir_false": "PASSED",
    "TestPackageAssetSource.test_isdir_true": "PASSED",
    "TestPackageAssetSource.test_listdir": "PASSED",
    "TestPackageAssetSource.test_listdir_doesnt_exist": "PASSED",
    "TestFSAssetSource.test_exists": "PASSED",
    "TestFSAssetSource.test_exists_file_doesnt_exist": "PASSED",
    "TestFSAssetSource.test_exists_with_prefix": "PASSED",
    "TestFSAssetSource.test_get_filename": "PASSED",
    "TestFSAssetSource.test_get_filename_file_doesnt_exist": "PASSED",
    "TestFSAssetSource.test_get_filename_with_prefix": "PASSED",
    "TestFSAssetSource.test_get_stream": "PASSED",
    "TestFSAssetSource.test_get_stream_file_doesnt_exist": "PASSED",
    "TestFSAssetSource.test_get_stream_with_prefix": "PASSED",
    "TestFSAssetSource.test_get_string": "PASSED",
    "TestFSAssetSource.test_get_string_file_doesnt_exist": "PASSED",
    "TestFSAssetSource.test_get_string_with_prefix": "PASSED",
    "TestFSAssetSource.test_isdir_doesnt_exist": "PASSED",
    "TestFSAssetSource.test_isdir_false": "PASSED",
    "TestFSAssetSource.test_isdir_true": "PASSED",
    "TestFSAssetSource.test_listdir": "PASSED",
    "TestFSAssetSource.test_listdir_doesnt_exist": "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_add_request_method_with_None_callable": "PASSED",
    "TestFactoriesMixin.test_add_request_method_with_None_callable_and_no_name": "PASSED",
    "TestFactoriesMixin.test_add_request_method_with_None_callable_conflict": "PASSED",
    "TestFactoriesMixin.test_add_request_method_with_callable": "PASSED",
    "TestFactoriesMixin.test_add_request_method_with_text_type_name": "PASSED",
    "TestFactoriesMixin.test_add_request_method_with_unnamed_callable": "PASSED",
    "TestFactoriesMixin.test_set_multiple_request_methods_conflict": "PASSED",
    "TestFactoriesMixin.test_set_request_factory": "PASSED",
    "TestFactoriesMixin.test_set_request_factory_dottedname": "PASSED",
    "TestFactoriesMixin.test_set_response_factory": "PASSED",
    "TestFactoriesMixin.test_set_response_factory_dottedname": "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",
    "TestDeprecatedFactoriesMixinMethods.test_set_multiple_request_properties": "PASSED",
    "TestDeprecatedFactoriesMixinMethods.test_set_multiple_request_properties_conflict": "PASSED",
    "TestDeprecatedFactoriesMixinMethods.test_set_request_property_with_callable": "PASSED",
    "TestDeprecatedFactoriesMixinMethods.test_set_request_property_with_property": "PASSED",
    "TestDeprecatedFactoriesMixinMethods.test_set_request_property_with_unnamed_callable": "PASSED",
    "TestI18NConfiguratorMixin.test_add_translation_dirs_missing_dir": "PASSED",
    "TestI18NConfiguratorMixin.test_add_translation_dirs_no_specs": "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_adds__lock": "PASSED",
    "ConfiguratorTests.test__fix_registry_adds_clear_view_lookup_cache": "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_default_webob_response_adapter_registered": "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_views": "PASSED",
    "ConfiguratorTests.test_setup_registry_registers_default_view_predicates": "PASSED",
    "ConfiguratorTests.test_setup_registry_registers_default_webob_iresponse_adapter": "PASSED",
    "ConfiguratorTests.test_setup_registry_request_factory": "PASSED",
    "ConfiguratorTests.test_setup_registry_request_factory_dottedname": "PASSED",
    "ConfiguratorTests.test_setup_registry_response_factory": "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",
    "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",
    "TestConfigurator__add_predicate.test_factory_as_object": "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",
    "TestActionState.test_reentrant_action": "PASSED",
    "TestActionState.test_reentrant_action_error": "PASSED",
    "TestActionState.test_reentrant_action_without_clear": "PASSED",
    "Test_reentrant_action_functional.test_functional": "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",
    "TestXHRPredicate.test___call___false": "PASSED",
    "TestXHRPredicate.test___call___true": "PASSED",
    "TestXHRPredicate.test_phash": "PASSED",
    "TestXHRPredicate.test_text": "PASSED",
    "TestRequestMethodPredicate.test___call___false": "PASSED",
    "TestRequestMethodPredicate.test___call___true_multi": "PASSED",
    "TestRequestMethodPredicate.test___call___true_single": "PASSED",
    "TestRequestMethodPredicate.test_ctor_get_but_no_head": "PASSED",
    "TestRequestMethodPredicate.test_phash": "PASSED",
    "TestRequestMethodPredicate.test_text": "PASSED",
    "TestPathInfoPredicate.test___call___false": "PASSED",
    "TestPathInfoPredicate.test___call___true": "PASSED",
    "TestPathInfoPredicate.test_ctor_compilefail": "PASSED",
    "TestPathInfoPredicate.test_phash": "PASSED",
    "TestPathInfoPredicate.test_text": "PASSED",
    "TestRequestParamPredicate.test___call___false": "PASSED",
    "TestRequestParamPredicate.test___call___false_multi": "PASSED",
    "TestRequestParamPredicate.test___call___true_exists": "PASSED",
    "TestRequestParamPredicate.test___call___true_multi": "PASSED",
    "TestRequestParamPredicate.test___call___true_withval": "PASSED",
    "TestRequestParamPredicate.test_phash_exists": "PASSED",
    "TestRequestParamPredicate.test_phash_exists_equal_sign": "PASSED",
    "TestRequestParamPredicate.test_phash_withval": "PASSED",
    "TestRequestParamPredicate.test_text_exists": "PASSED",
    "TestRequestParamPredicate.test_text_exists_equal_sign": "PASSED",
    "TestRequestParamPredicate.test_text_multi": "PASSED",
    "TestRequestParamPredicate.test_text_multi_equal_sign": "PASSED",
    "TestRequestParamPredicate.test_text_withval": "PASSED",
    "TestMatchParamPredicate.test___call___false": "PASSED",
    "TestMatchParamPredicate.test___call___matchdict_is_None": "PASSED",
    "TestMatchParamPredicate.test___call___true_multi": "PASSED",
    "TestMatchParamPredicate.test___call___true_single": "PASSED",
    "TestMatchParamPredicate.test_phash": "PASSED",
    "TestMatchParamPredicate.test_text": "PASSED",
    "TestCustomPredicate.test___call___false": "PASSED",
    "TestCustomPredicate.test___call___true": "PASSED",
    "TestCustomPredicate.test_phash": "PASSED",
    "TestCustomPredicate.test_text_func_has___text__": "PASSED",
    "TestCustomPredicate.test_text_func_repr": "PASSED",
    "TestTraversePredicate.test___call__traverse_has_remainder_already": "PASSED",
    "TestTraversePredicate.test___call__traverse_matches": "PASSED",
    "TestTraversePredicate.test___call__traverse_matches_with_highorder_chars": "PASSED",
    "TestTraversePredicate.test_phash": "PASSED",
    "TestTraversePredicate.test_text": "PASSED",
    "Test_CheckCSRFTokenPredicate.test_it_call_val_False": "PASSED",
    "Test_CheckCSRFTokenPredicate.test_it_call_val_True": "PASSED",
    "Test_CheckCSRFTokenPredicate.test_it_call_val_str": "PASSED",
    "Test_CheckCSRFTokenPredicate.test_phash": "PASSED",
    "Test_CheckCSRFTokenPredicate.test_text": "PASSED",
    "TestHeaderPredicate.test___call___false": "PASSED",
    "TestHeaderPredicate.test___call___false_withregex": "PASSED",
    "TestHeaderPredicate.test___call___true_exists": "PASSED",
    "TestHeaderPredicate.test___call___true_withregex": "PASSED",
    "TestHeaderPredicate.test___call___true_withval": "PASSED",
    "TestHeaderPredicate.test_phash_exists": "PASSED",
    "TestHeaderPredicate.test_phash_withregex": "PASSED",
    "TestHeaderPredicate.test_phash_withval": "PASSED",
    "TestHeaderPredicate.test_text_exists": "PASSED",
    "TestHeaderPredicate.test_text_withregex": "PASSED",
    "TestHeaderPredicate.test_text_withval": "PASSED",
    "Test_PhysicalPathPredicate.test_it_call_False": "PASSED",
    "Test_PhysicalPathPredicate.test_it_call_context_has_no_name": "PASSED",
    "Test_PhysicalPathPredicate.test_it_call_val_list_True": "PASSED",
    "Test_PhysicalPathPredicate.test_it_call_val_str_True": "PASSED",
    "Test_PhysicalPathPredicate.test_it_call_val_tuple_True": "PASSED",
    "Test_PhysicalPathPredicate.test_phash": "PASSED",
    "Test_PhysicalPathPredicate.test_text": "PASSED",
    "Test_EffectivePrincipalsPredicate.test_it_call_authentication_policy_doesnt_provide_superset": "PASSED",
    "Test_EffectivePrincipalsPredicate.test_it_call_authentication_policy_provides_superset": "PASSED",
    "Test_EffectivePrincipalsPredicate.test_it_call_authentication_policy_provides_superset_implicit": "PASSED",
    "Test_EffectivePrincipalsPredicate.test_it_call_no_authentication_policy": "PASSED",
    "Test_EffectivePrincipalsPredicate.test_phash": "PASSED",
    "Test_EffectivePrincipalsPredicate.test_text": "PASSED",
    "Test_EffectivePrincipalsPredicate.test_text_noniter": "PASSED",
    "TestRenderingConfiguratorMixin.test_add_default_renderers": "PASSED",
    "TestRenderingConfiguratorMixin.test_add_renderer": "PASSED",
    "TestRenderingConfiguratorMixin.test_add_renderer_dottedname_factory": "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_add_permission": "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_None": "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_cachebust": "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",
    "TestingConfiguratorMixinTests.test_testing_securitypolicy_forget_result": "PASSED",
    "TestingConfiguratorMixinTests.test_testing_securitypolicy_remember_result": "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",
    "TestPredicateList.test_custom_predicates_can_affect_traversal": "PASSED",
    "TestPredicateList.test_different_custom_predicates_with_same_hash": "PASSED",
    "TestPredicateList.test_match_param_from_dict": "PASSED",
    "TestPredicateList.test_match_param_from_dict_fails": "PASSED",
    "TestPredicateList.test_match_param_from_string": "PASSED",
    "TestPredicateList.test_match_param_from_string_fails": "PASSED",
    "TestPredicateList.test_notted": "PASSED",
    "TestPredicateList.test_ordering_importance_and_number": "PASSED",
    "TestPredicateList.test_ordering_importance_of_predicates": "PASSED",
    "TestPredicateList.test_ordering_number_of_predicates": "PASSED",
    "TestPredicateList.test_ordering_xhr_and_request_method_trump_only_containment": "PASSED",
    "TestPredicateList.test_predicate_text_is_correct": "PASSED",
    "TestPredicateList.test_request_method_ordering_hashes_same": "PASSED",
    "TestPredicateList.test_request_method_sequence": "PASSED",
    "TestPredicateList.test_traverse_has_remainder_already": "PASSED",
    "TestPredicateList.test_traverse_matches": "PASSED",
    "TestPredicateList.test_traverse_matches_with_highorder_chars": "PASSED",
    "TestPredicateList.test_unknown_predicate": "PASSED",
    "Test_takes_one_arg.test_function_annotations": "PASSED",
    "Test_takes_one_arg.test_function_defaultargs_firstname_not_request": "PASSED",
    "Test_takes_one_arg.test_function_defaultargs_firstname_request": "PASSED",
    "Test_takes_one_arg.test_function_noargs": "PASSED",
    "Test_takes_one_arg.test_function_onearg_named_request": "PASSED",
    "Test_takes_one_arg.test_function_onearg_named_somethingelse": "PASSED",
    "Test_takes_one_arg.test_function_toomanyargs": "PASSED",
    "Test_takes_one_arg.test_function_with_attr_false": "PASSED",
    "Test_takes_one_arg.test_function_with_attr_true": "PASSED",
    "Test_takes_one_arg.test_instance_defaultargs_firstname_not_request": "PASSED",
    "Test_takes_one_arg.test_instance_defaultargs_firstname_request": "PASSED",
    "Test_takes_one_arg.test_instance_defaultargs_onearg_named_request": "PASSED",
    "Test_takes_one_arg.test_instance_defaultargs_onearg_named_somethingelse": "PASSED",
    "Test_takes_one_arg.test_instance_nocall": "PASSED",
    "Test_takes_one_arg.test_instance_toomanyargs": "PASSED",
    "Test_takes_one_arg.test_method_onearg_named_request": "PASSED",
    "Test_takes_one_arg.test_newstyle_class_init_defaultargs_firstname_not_request": "PASSED",
    "Test_takes_one_arg.test_newstyle_class_init_defaultargs_firstname_request": "PASSED",
    "Test_takes_one_arg.test_newstyle_class_init_firstname_request_with_secondname": "PASSED",
    "Test_takes_one_arg.test_newstyle_class_init_noargs": "PASSED",
    "Test_takes_one_arg.test_newstyle_class_init_onearg_named_somethingelse": "PASSED",
    "Test_takes_one_arg.test_oldstyle_class_init_defaultargs_firstname_not_request": "PASSED",
    "Test_takes_one_arg.test_oldstyle_class_init_defaultargs_firstname_request": "PASSED",
    "Test_takes_one_arg.test_oldstyle_class_init_noargs": "PASSED",
    "Test_takes_one_arg.test_oldstyle_class_init_onearg_named_request": "PASSED",
    "Test_takes_one_arg.test_oldstyle_class_init_onearg_named_somethingelse": "PASSED",
    "Test_takes_one_arg.test_oldstyle_class_init_toomanyargs": "PASSED",
    "Test_takes_one_arg.test_oldstyle_class_no_init": "PASSED",
    "Test_takes_one_arg.test_requestonly_newstyle_class_init_onearg_named_request": "PASSED",
    "Test_takes_one_arg.test_requestonly_newstyle_class_init_toomanyargs": "PASSED",
    "Test_takes_one_arg.test_requestonly_newstyle_class_no_init": "PASSED",
    "TestNotted.test_it_with_phash_val": "PASSED",
    "TestNotted.test_it_without_phash_val": "PASSED",
    "TestViewsConfigurationMixin.test_add_forbidden_view": "PASSED",
    "TestViewsConfigurationMixin.test_add_forbidden_view_allows_other_predicates": "PASSED",
    "TestViewsConfigurationMixin.test_add_forbidden_view_disallows_context": "PASSED",
    "TestViewsConfigurationMixin.test_add_forbidden_view_disallows_for_": "PASSED",
    "TestViewsConfigurationMixin.test_add_forbidden_view_disallows_http_cache": "PASSED",
    "TestViewsConfigurationMixin.test_add_forbidden_view_disallows_name": "PASSED",
    "TestViewsConfigurationMixin.test_add_forbidden_view_disallows_permission": "PASSED",
    "TestViewsConfigurationMixin.test_add_forbidden_view_no_view_argument": "PASSED",
    "TestViewsConfigurationMixin.test_add_forbidden_view_with_renderer": "PASSED",
    "TestViewsConfigurationMixin.test_add_forbidden_view_with_view_defaults": "PASSED",
    "TestViewsConfigurationMixin.test_add_notfound_view": "PASSED",
    "TestViewsConfigurationMixin.test_add_notfound_view_allows_other_predicates": "PASSED",
    "TestViewsConfigurationMixin.test_add_notfound_view_append_slash": "PASSED",
    "TestViewsConfigurationMixin.test_add_notfound_view_append_slash_custom_response": "PASSED",
    "TestViewsConfigurationMixin.test_add_notfound_view_disallows_context": "PASSED",
    "TestViewsConfigurationMixin.test_add_notfound_view_disallows_for_": "PASSED",
    "TestViewsConfigurationMixin.test_add_notfound_view_disallows_http_cache": "PASSED",
    "TestViewsConfigurationMixin.test_add_notfound_view_disallows_name": "PASSED",
    "TestViewsConfigurationMixin.test_add_notfound_view_disallows_permission": "PASSED",
    "TestViewsConfigurationMixin.test_add_notfound_view_no_view_argument": "PASSED",
    "TestViewsConfigurationMixin.test_add_notfound_view_with_renderer": "PASSED",
    "TestViewsConfigurationMixin.test_add_notfound_view_with_view_defaults": "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_class_method_no_attr": "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_mixed_case_replaces_existing_view": "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_decorator_tuple": "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_tmpl_renderer_factory_introspector_missing": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_tmpl_renderer_factory_no_renderer_factory": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_tmpl_renderer_factory_with_renderer_factory": "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",
    "TestViewsConfigurationMixin.test_view_with_most_specific_predicate": "PASSED",
    "TestViewsConfigurationMixin.test_view_with_most_specific_predicate_with_mismatch": "PASSED",
    "Test_requestonly.test_defaults": "PASSED",
    "Test_requestonly.test_otherattr": "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_add_with_phash_override_accept2": "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_function_returns_true_Response_no_renderer": "PASSED",
    "TestViewDeriver.test_function_returns_true_Response_with_renderer": "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_exception_has_text_in_detail": "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_cachebust_prevented": "PASSED",
    "TestStaticURLInfo.test_add_cachebuster": "PASSED",
    "TestStaticURLInfo.test_add_cachebuster_abspath": "PASSED",
    "TestStaticURLInfo.test_add_cachebuster_for_more_specific_path": "PASSED",
    "TestStaticURLInfo.test_add_cachebuster_overwrite": "PASSED",
    "TestStaticURLInfo.test_add_cachebuster_overwrite_explicit": "PASSED",
    "TestStaticURLInfo.test_add_package_root": "PASSED",
    "TestStaticURLInfo.test_add_url_noendslash": "PASSED",
    "TestStaticURLInfo.test_add_url_noscheme": "PASSED",
    "TestStaticURLInfo.test_add_url_withendslash": "PASSED",
    "TestStaticURLInfo.test_add_viewname": "PASSED",
    "TestStaticURLInfo.test_add_viewname_with_context": "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_generate_missing": "PASSED",
    "TestStaticURLInfo.test_generate_quoting": "PASSED",
    "TestStaticURLInfo.test_generate_registration_miss": "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_cachebust": "PASSED",
    "TestStaticURLInfo.test_generate_url_cachebust_abspath": "PASSED",
    "TestStaticURLInfo.test_generate_url_cachebust_nomatch": "PASSED",
    "TestStaticURLInfo.test_generate_url_quoted_remote": "PASSED",
    "TestStaticURLInfo.test_generate_url_unquoted_local": "PASSED",
    "TestStaticURLInfo.test_generate_url_with_custom_anchor": "PASSED",
    "TestStaticURLInfo.test_generate_url_with_custom_query": "PASSED",
    "TestStaticURLInfo.test_verifyClass": "PASSED",
    "TestStaticURLInfo.test_verifyObject": "PASSED",
    "Test_view_description.test_with_text": "PASSED",
    "Test_logging_file_config.test_it": "PASSED",
    "TestParseVars.test_parse_vars_bad": "PASSED",
    "TestParseVars.test_parse_vars_good": "PASSED",
    "TestPCreateCommand.test_confirm_override_conflicting_name": "PASSED",
    "TestPCreateCommand.test_force_override_conflicting_name": "PASSED",
    "TestPCreateCommand.test_force_override_site_name": "PASSED",
    "TestPCreateCommand.test_known_scaffold_absolute_path": "PASSED",
    "TestPCreateCommand.test_known_scaffold_multiple_rendered": "PASSED",
    "TestPCreateCommand.test_known_scaffold_single_rendered": "PASSED",
    "TestPCreateCommand.test_known_scaffold_with_path_as_project_target_rendered": "PASSED",
    "TestPCreateCommand.test_no_project_name": "PASSED",
    "TestPCreateCommand.test_run_no_scaffold_name": "PASSED",
    "TestPCreateCommand.test_run_no_scaffold_no_args": "PASSED",
    "TestPCreateCommand.test_run_show_scaffolds_exist": "PASSED",
    "TestPCreateCommand.test_run_show_scaffolds_none_exist": "PASSED",
    "TestPCreateCommand.test_scaffold_with_dev_pyramid_long_version": "PASSED",
    "TestPCreateCommand.test_scaffold_with_dev_pyramid_version": "PASSED",
    "TestPCreateCommand.test_scaffold_with_hyphen_in_project_name": "PASSED",
    "TestPCreateCommand.test_scaffold_with_prod_pyramid_long_version": "PASSED",
    "TestPCreateCommand.test_scaffold_with_prod_pyramid_unparsable_version": "PASSED",
    "TestPCreateCommand.test_scaffold_with_prod_pyramid_version": "PASSED",
    "TestPCreateCommand.test_unknown_scaffold_name": "PASSED",
    "Test_main.test_it": "PASSED",
    "TestPDistReportCommand.test_no_dists": "PASSED",
    "TestPDistReportCommand.test_with_dists": "PASSED",
    "TestPRequestCommand.test_command_has_bad_config_header": "PASSED",
    "TestPRequestCommand.test_command_method_configures_logging": "PASSED",
    "TestPRequestCommand.test_command_not_enough_args": "PASSED",
    "TestPRequestCommand.test_command_response_has_no_charset": "PASSED",
    "TestPRoutesCommand.test__get_mapper": "PASSED",
    "TestPRoutesCommand.test_bad_args": "PASSED",
    "TestPRoutesCommand.test_bad_format": "PASSED",
    "TestPRoutesCommand.test_good_args": "PASSED",
    "TestPRoutesCommand.test_good_format": "PASSED",
    "TestPRoutesCommand.test_no_mapper": "PASSED",
    "TestPRoutesCommand.test_no_routes": "PASSED",
    "TestPRoutesCommand.test_route_as_wsgiapp": "PASSED",
    "TestPRoutesCommand.test_route_no_view": "PASSED",
    "TestPRoutesCommand.test_route_with_no_slash_prefix": "PASSED",
    "TestPRoutesCommand.test_single_route_multiview_registered": "PASSED",
    "TestPRoutesCommand.test_single_route_no_route_registered": "PASSED",
    "TestPRoutesCommand.test_single_route_no_views_registered": "PASSED",
    "TestPRoutesCommand.test_single_route_one_view_registered_with_factory": "PASSED",
    "TestPRoutesCommand.test_static_routes_included_in_list": "PASSED",
    "TestPServeCommand.test_get_options_no_command": "PASSED",
    "TestPServeCommand.test_get_options_with_command": "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_default_shell_option": "PASSED",
    "TestPShellCommand.test_command_errors_with_unknown_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_ipython": "PASSED",
    "TestPShellCommand.test_command_loads_pythonstartup": "PASSED",
    "TestPShellCommand.test_command_loads_setup_from_options": "PASSED",
    "TestPShellCommand.test_command_setup": "PASSED",
    "TestPShellCommand.test_list_shells": "PASSED",
    "TestPShellCommand.test_shell_entry_points": "PASSED",
    "TestPShellCommand.test_shell_ordering": "PASSED",
    "TestPShellCommand.test_shell_override": "PASSED",
    "Test_python_shell_runner.test_it": "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",
    "TestAssetsConfiguratorMixin.test_override_asset_directory_with_directory": "FAILED",
    "TestAssetsConfiguratorMixin.test_override_asset_directory_with_package": "FAILED",
    "TestAssetsConfiguratorMixin.test_override_asset_file_with_file": "FAILED",
    "TestAssetsConfiguratorMixin.test_override_asset_package_with_directory": "FAILED",
    "TestAssetsConfiguratorMixin.test_override_asset_package_with_package": "FAILED",
    "TestOverrideProvider.test_get_resource_filename_no_overrides": "FAILED",
    "TestOverrideProvider.test_get_resource_filename_override_returns_None": "FAILED",
    "TestPackageAssetSource.test_get_filename": "FAILED",
    "TestPackageAssetSource.test_get_filename_with_prefix": "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_include_constant_root_package": "FAILED",
    "ConfiguratorTests.test_scan_integration_conflict": "FAILED",
    "ConfiguratorTests.test_setup_registry_debug_logger_None_default": "FAILED",
    "TestConfigurator_add_directive.test_add_directive_with_custom_callable": "FAILED",
    "TestConfigurator_add_directive.test_add_directive_with_partial": "FAILED",
    "TestConfigurator_add_directive.test_extend_with_dotted_name": "FAILED",
    "TestConfigurator_add_directive.test_extend_with_python_callable": "FAILED",
    "TestConfigurator__add_predicate.test_factory_as_dotted_name": "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",
    "TestStaticURLInfo.test_generate_url_cachebust_with_overrides": "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_options": "FAILED",
    "TestPRequestCommand.test_command_method_patch": "FAILED",
    "TestPRequestCommand.test_command_method_post": "FAILED",
    "TestPRequestCommand.test_command_method_propfind": "FAILED",
    "TestPRequestCommand.test_command_method_put": "FAILED",
    "TestPRequestCommand.test_command_path_doesnt_start_with_slash": "FAILED",
    "TestPRequestCommand.test_command_two_args": "FAILED",
    "TestPRequestCommand.test_command_w_basic_auth": "FAILED",
    "TestPRequestCommand.test_command_with_query_string": "FAILED",
    "TestPRoutesCommand.test_config_format_ini_commas": "FAILED",
    "TestPRoutesCommand.test_config_format_ini_newlines": "FAILED",
    "TestPRoutesCommand.test_config_format_ini_spaces": "FAILED",
    "TestPRoutesCommand.test_one_route_all_methods_view_only_post": "FAILED",
    "TestPRoutesCommand.test_one_route_only_post_view_all_methods": "FAILED",
    "TestPRoutesCommand.test_one_route_only_post_view_post_and_get": "FAILED",
    "TestPRoutesCommand.test_one_route_with_long_name_one_view_registered": "FAILED",
    "TestPRoutesCommand.test_route_is_get_view_request_method_not_post": "FAILED",
    "TestPRoutesCommand.test_route_request_method_mismatch": "FAILED",
    "TestPRoutesCommand.test_route_static_views": "FAILED",
    "TestPRoutesCommand.test_single_route_one_view_registered": "FAILED",
    "TestPRoutesCommand.test_view_glob": "FAILED",
    "TestPRoutesCommand.test_view_request_method_not_post": "FAILED",
    "TestPViewsCommand.test_views_command_single_view_function_traversal": "FAILED"
}
diff --git a/pyramid/paster.py b/pyramid/paster.py
index 967543849..5e2200ea7 100644
--- a/pyramid/paster.py
+++ b/pyramid/paster.py
@@ -52,7 +52,8 @@ def get_appsettings(config_uri, name=None, options=None, appconfig=appconfig):
         relative_to=here_dir,
         global_conf=options)
 
-def setup_logging(config_uri, fileConfig=fileConfig,
+def setup_logging(config_uri, global_conf=None,
+                  fileConfig=fileConfig,
                   configparser=configparser):
     """
     Set up logging via the logging module's fileConfig function with the
@@ -61,16 +62,22 @@ def setup_logging(config_uri, fileConfig=fileConfig,
 
     ConfigParser defaults are specified for the special ``__file__``
     and ``here`` variables, similar to PasteDeploy config loading.
+    Extra defaults can optionally be specified as a dict in ``global_conf``.
     """
     path, _ = _getpathsec(config_uri, None)
     parser = configparser.ConfigParser()
     parser.read([path])
     if parser.has_section('loggers'):
         config_file = os.path.abspath(path)
-        return fileConfig(
-            config_file,
-            dict(__file__=config_file, here=os.path.dirname(config_file))
-            )
+        if global_conf:
+            # Copy to avoid side effects
+            global_conf = dict(global_conf)
+        else:
+            global_conf = {}
+        global_conf.update(
+            __file__=config_file,
+            here=os.path.dirname(config_file))
+        return fileConfig(config_file, global_conf)
 
 def _getpathsec(config_uri, name):
     if '#' in config_uri:
diff --git a/pyramid/scripts/pserve.py b/pyramid/scripts/pserve.py
index 431afe6f4..74bda1dce 100644
--- a/pyramid/scripts/pserve.py
+++ b/pyramid/scripts/pserve.py
@@ -362,7 +362,7 @@ a real process manager for your processes like Systemd, Circus, or Supervisor.
             log_fn = None
         if log_fn:
             log_fn = os.path.join(base, log_fn)
-            setup_logging(log_fn)
+            setup_logging(log_fn, global_conf=vars)
 
         server = self.loadserver(server_spec, name=server_name,
                                  relative_to=base, global_conf=vars)

{"pyramid/paster.py": "import os\n\nfrom paste.deploy import (\n    loadapp,\n    appconfig,\n    )\n\nfrom pyramid.compat import configparser\nfrom logging.config import fileConfig\nfrom pyramid.scripting import prepare\n\ndef get_app(config_uri, name=None, options=None, loadapp=loadapp):\n    \"\"\" Return the WSGI application named ``name`` in the PasteDeploy\n    config file specified by ``config_uri``.\n\n    ``options``, if passed, should be a dictionary used as variable assignments\n    like ``{'http_port': 8080}``.  This is useful if e.g. ``%(http_port)s`` is\n    used in the config file.\n\n    If the ``name`` is None, this will attempt to parse the name from\n    the ``config_uri`` string expecting the format ``inifile#name``.\n    If no name is found, the name will default to \"main\".\"\"\"\n    path, section = _getpathsec(config_uri, name)\n    config_name = 'config:%s' % path\n    here_dir = os.getcwd()\n\n    app = loadapp(\n        config_name,\n        name=section,\n        relative_to=here_dir,\n        global_conf=options)\n\n    return app\n\ndef get_appsettings(config_uri, name=None, options=None, appconfig=appconfig):\n    \"\"\" Return a dictionary representing the key/value pairs in an ``app``\n    section within the file represented by ``config_uri``.\n\n    ``options``, if passed, should be a dictionary used as variable assignments\n    like ``{'http_port': 8080}``.  This is useful if e.g. ``%(http_port)s`` is\n    used in the config file.\n\n    If the ``name`` is None, this will attempt to parse the name from\n    the ``config_uri`` string expecting the format ``inifile#name``.\n    If no name is found, the name will default to \"main\".\"\"\"\n    path, section = _getpathsec(config_uri, name)\n    config_name = 'config:%s' % path\n    here_dir = os.getcwd()\n    return appconfig(\n        config_name,\n        name=section,\n        relative_to=here_dir,\n        global_conf=options)\n\ndef setup_logging(config_uri, fileConfig=fileConfig,\n                  configparser=configparser):\n    \"\"\"\n    Set up logging via the logging module's fileConfig function with the\n    filename specified via ``config_uri`` (a string in the form\n    ``filename#sectionname``).\n\n    ConfigParser defaults are specified for the special ``__file__``\n    and ``here`` variables, similar to PasteDeploy config loading.\n    \"\"\"\n    path, _ = _getpathsec(config_uri, None)\n    parser = configparser.ConfigParser()\n    parser.read([path])\n    if parser.has_section('loggers'):\n        config_file = os.path.abspath(path)\n        return fileConfig(\n            config_file,\n            dict(__file__=config_file, here=os.path.dirname(config_file))\n            )\n\ndef _getpathsec(config_uri, name):\n    if '#' in config_uri:\n        path, section = config_uri.split('#', 1)\n    else:\n        path, section = config_uri, 'main'\n    if name:\n        section = name\n    return path, section\n\ndef bootstrap(config_uri, request=None, options=None):\n    \"\"\" Load a WSGI application from the PasteDeploy config file specified\n    by ``config_uri``. The environment will be configured as if it is\n    currently serving ``request``, leaving a natural environment in place\n    to write scripts that can generate URLs and utilize renderers.\n\n    This function returns a dictionary with ``app``, ``root``, ``closer``,\n    ``request``, and ``registry`` keys.  ``app`` is the WSGI app loaded\n    (based on the ``config_uri``), ``root`` is the traversal root resource\n    of the Pyramid application, and ``closer`` is a parameterless callback\n    that may be called when your script is complete (it pops a threadlocal\n    stack).\n\n    .. note::\n\n       Most operations within :app:`Pyramid` expect to be invoked within the\n       context of a WSGI request, thus it's important when loading your\n       application to anchor it when executing scripts and other code that is\n       not normally invoked during active WSGI requests.\n\n    .. note::\n\n       For a complex config file containing multiple :app:`Pyramid`\n       applications, this function will setup the environment under the context\n       of the last-loaded :app:`Pyramid` application. You may load a specific\n       application yourself by using the lower-level functions\n       :meth:`pyramid.paster.get_app` and :meth:`pyramid.scripting.prepare` in\n       conjunction with :attr:`pyramid.config.global_registries`.\n\n    ``config_uri`` -- specifies the PasteDeploy config file to use for the\n    interactive shell. The format is ``inifile#name``. If the name is left\n    off, ``main`` will be assumed.\n\n    ``request`` -- specified to anchor the script to a given set of WSGI\n    parameters. For example, most people would want to specify the host,\n    scheme and port such that their script will generate URLs in relation\n    to those parameters. A request with default parameters is constructed\n    for you if none is provided. You can mutate the request's ``environ``\n    later to setup a specific host/port/scheme/etc.\n\n    ``options`` Is passed to get_app for use as variable assignments like \n    {'http_port': 8080} and then use %(http_port)s in the\n    config file.\n\n    See :ref:`writing_a_script` for more information about how to use this\n    function.\n    \"\"\"\n    app = get_app(config_uri, options=options)\n    env = prepare(request)\n    env['app'] = app\n    return env\n\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:** `setup_logging()` Raises TypeError When `global_conf` is Passed

**Description:**
When attempting to pass the `global_conf` parameter to the `setup_logging()` function, a `TypeError` is raised because the function does not accept this keyword argument.

**Example Buggy Code:**
```python
from pyramid.paster import setup_logging

config_file = '/abc'
global_conf = {'key': 'val'}
setup_logging(config_file, global_conf=global_conf)
```

**Expected Behavior:**
The `setup_logging()` function should accept the `global_conf` argument and properly incorporate the provided configuration without any errors.

**Actual Behavior:**
A `TypeError` is thrown with the message:
```
TypeError: setup_logging() got an unexpected keyword argument 'global_conf'
```
[/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/paster.py
import os

from paste.deploy import (
    loadapp,
    appconfig,
    )

from pyramid.compat import configparser
from logging.config import fileConfig
from pyramid.scripting import prepare

def get_app(config_uri, name=None, options=None, loadapp=loadapp):
    """ Return the WSGI application named ``name`` in the PasteDeploy
    config file specified by ``config_uri``.

    ``options``, if passed, should be a dictionary used as variable assignments
    like ``{'http_port': 8080}``.  This is useful if e.g. ``%(http_port)s`` is
    used in the config file.

    If the ``name`` is None, this will attempt to parse the name from
    the ``config_uri`` string expecting the format ``inifile#name``.
    If no name is found, the name will default to "main"."""
    path, section = _getpathsec(config_uri, name)
    config_name = 'config:%s' % path
    here_dir = os.getcwd()

    app = loadapp(
        config_name,
        name=section,
        relative_to=here_dir,
        global_conf=options)

    return app

def get_appsettings(config_uri, name=None, options=None, appconfig=appconfig):
    """ Return a dictionary representing the key/value pairs in an ``app``
    section within the file represented by ``config_uri``.

    ``options``, if passed, should be a dictionary used as variable assignments
    like ``{'http_port': 8080}``.  This is useful if e.g. ``%(http_port)s`` is
    used in the config file.

    If the ``name`` is None, this will attempt to parse the name from
    the ``config_uri`` string expecting the format ``inifile#name``.
    If no name is found, the name will default to "main"."""
    path, section = _getpathsec(config_uri, name)
    config_name = 'config:%s' % path
    here_dir = os.getcwd()
    return appconfig(
        config_name,
        name=section,
        relative_to=here_dir,
        global_conf=options)

def setup_logging(config_uri, fileConfig=fileConfig,
                  configparser=configparser):
    """
    Set up logging via the logging module's fileConfig function with the
    filename specified via ``config_uri`` (a string in the form
    ``filename#sectionname``).

    ConfigParser defaults are specified for the special ``__file__``
    and ``here`` variables, similar to PasteDeploy config loading.
    """
    path, _ = _getpathsec(config_uri, None)
    parser = configparser.ConfigParser()
    parser.read([path])
    if parser.has_section('loggers'):
        config_file = os.path.abspath(path)
        return fileConfig(
            config_file,
            dict(__file__=config_file, here=os.path.dirname(config_file))
            )

def _getpathsec(config_uri, name):
    if '#' in config_uri:
        path, section = config_uri.split('#', 1)
    else:
        path, section = config_uri, 'main'
    if name:
        section = name
    return path, section

def bootstrap(config_uri, request=None, options=None):
    """ Load a WSGI application from the PasteDeploy config file specified
    by ``config_uri``. The environment will be configured as if it is
    currently serving ``request``, leaving a natural environment in place
    to write scripts that can generate URLs and utilize renderers.

    This function returns a dictionary with ``app``, ``root``, ``closer``,
    ``request``, and ``registry`` keys.  ``app`` is the WSGI app loaded
    (based on the ``config_uri``), ``root`` is the traversal root resource
    of the Pyramid application, and ``closer`` is a parameterless callback
    that may be called when your script is complete (it pops a threadlocal
    stack).

    .. note::

       Most operations within :app:`Pyramid` expect to be invoked within the
       context of a WSGI request, thus it's important when loading your
       application to anchor it when executing scripts and other code that is
       not normally invoked during active WSGI requests.

    .. note::

       For a complex config file containing multiple :app:`Pyramid`
       applications, this function will setup the environment under the context
       of the last-loaded :app:`Pyramid` application. You may load a specific
       application yourself by using the lower-level functions
       :meth:`pyramid.paster.get_app` and :meth:`pyramid.scripting.prepare` in
       conjunction with :attr:`pyramid.config.global_registries`.

    ``config_uri`` -- specifies the PasteDeploy config file to use for the
    interactive shell. The format is ``inifile#name``. If the name is left
    off, ``main`` will be assumed.

    ``request`` -- specified to anchor the script to a given set of WSGI
    parameters. For example, most people would want to specify the host,
    scheme and port such that their script will generate URLs in relation
    to those parameters. A request with default parameters is constructed
    for you if none is provided. You can mutate the request's ``environ``
    later to setup a specific host/port/scheme/etc.

    ``options`` Is passed to get_app for use as variable assignments like 
    {'http_port': 8080} and then use %(http_port)s in the
    config file.

    See :ref:`writing_a_script` for more information about how to use this
    function.
    """
    app = get_app(config_uri, options=options)
    env = prepare(request)
    env['app'] = app
    return env


```
--- 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