{
    "file_diffs": [
        {
            "old_file_content": ".. _command_line_chapter:\n\nCommand-Line Pyramid\n====================\n\nYour :app:`Pyramid` application can be controlled and inspected using a\nvariety of command-line utilities.  These utilities are documented in this\nchapter.\n\n.. index::\n   pair: matching views; printing\n   single: pviews\n\n.. _displaying_matching_views:\n\nDisplaying Matching Views for a Given URL\n-----------------------------------------\n\nFor a big application with several views, it can be hard to keep the view\nconfiguration details in your head, even if you defined all the views\nyourself. You can use the ``pviews`` command in a terminal window to\nprint a summary of matching routes and views for a given URL in your\napplication. The ``pviews`` command accepts two arguments. The first\nargument to ``pviews`` is the path to your application's ``.ini`` file and\nsection name inside the ``.ini`` file which points to your application.  This\nshould be of the format ``config_file#section_name``. The second argument is\nthe URL to test for matching views.  The ``section_name`` may be omitted; if\nit is, it's considered to be ``main``.\n\nHere is an example for a simple view configuration using :term:`traversal`:\n\n.. code-block:: text\n   :linenos:\n\n   $ $VENV/bin/pviews development.ini#tutorial /FrontPage\n\n   URL = /FrontPage\n\n       context: <tutorial.models.Page object at 0xa12536c>\n       view name:\n\n       View:\n       -----\n       tutorial.views.view_page\n       required permission = view\n\nThe output always has the requested URL at the top and below that all the\nviews that matched with their view configuration details. In this example\nonly one view matches, so there is just a single *View* section. For each\nmatching view, the full code path to the associated view callable is shown,\nalong with any permissions and predicates that are part of that view\nconfiguration.\n\nA more complex configuration might generate something like this:\n\n.. code-block:: text\n   :linenos:\n\n   $ $VENV/bin/pviews development.ini#shootout /about\n\n   URL = /about\n\n       context: <shootout.models.RootFactory object at 0xa56668c>\n       view name: about\n\n       Route:\n       ------\n       route name: about\n       route pattern: /about\n       route path: /about\n       subpath:\n       route predicates (request method = GET)\n\n           View:\n           -----\n           shootout.views.about_view\n           required permission = view\n           view predicates (request_param testing, header X/header)\n\n       Route:\n       ------\n       route name: about_post\n       route pattern: /about\n       route path: /about\n       subpath:\n       route predicates (request method = POST)\n\n           View:\n           -----\n           shootout.views.about_view_post\n           required permission = view\n           view predicates (request_param test)\n\n           View:\n           -----\n           shootout.views.about_view_post2\n           required permission = view\n           view predicates (request_param test2)\n\nIn this case, we are dealing with a :term:`URL dispatch` application. This\nspecific URL has two matching routes. The matching route information is\ndisplayed first, followed by any views that are associated with that route.\nAs you can see from the second matching route output, a route can be\nassociated with more than one view.\n\nFor a URL that doesn't match any views, ``pviews`` will simply print out a\n*Not found* message.\n\n\n.. index::\n   single: interactive shell\n   single: IPython\n   single: pshell\n   single: bpython\n\n.. _interactive_shell:\n\nThe Interactive Shell\n---------------------\n\nOnce you've installed your program for development using ``setup.py\ndevelop``, you can use an interactive Python shell to execute expressions in\na Python environment exactly like the one that will be used when your\napplication runs \"for real\".  To do so, use the ``pshell`` command line\nutility.\n\nThe argument to ``pshell`` follows the format ``config_file#section_name``\nwhere ``config_file`` is the path to your application's ``.ini`` file and\n``section_name`` is the ``app`` section name inside the ``.ini`` file which\npoints to your application.  For example, if your application ``.ini`` file\nmight have a ``[app:main]`` section that looks like so:\n\n.. code-block:: ini\n   :linenos:\n\n   [app:main]\n   use = egg:MyProject\n   pyramid.reload_templates = true\n   pyramid.debug_authorization = false\n   pyramid.debug_notfound = false\n   pyramid.debug_templates = true\n   pyramid.default_locale_name = en\n\nIf so, you can use the following command to invoke a debug shell using the\nname ``main`` as a section name:\n\n.. code-block:: text\n\n    $ $VENV/bin/pshell starter/development.ini#main\n    Python 2.6.5 (r265:79063, Apr 29 2010, 00:31:32) \n    [GCC 4.4.3] on linux2\n    Type \"help\" for more information.\n\n    Environment:\n      app          The WSGI application.\n      registry     Active Pyramid registry.\n      request      Active request object.\n      root         Root of the default resource tree.\n      root_factory Default root factory used to create `root`.\n\n    >>> root\n    <myproject.resources.MyResource object at 0x445270>\n    >>> registry\n    <Registry myproject>\n    >>> registry.settings['pyramid.debug_notfound']\n    False\n    >>> from myproject.views import my_view\n    >>> from pyramid.request import Request\n    >>> r = Request.blank('/')\n    >>> my_view(r)\n    {'project': 'myproject'}\n\nThe WSGI application that is loaded will be available in the shell as the\n``app`` global. Also, if the application that is loaded is the :app:`Pyramid`\napp with no surrounding :term:`middleware`, the ``root`` object returned by\nthe default :term:`root factory`, ``registry``, and ``request`` will be\navailable.\n\nYou can also simply rely on the ``main`` default section name by omitting any\nhash after the filename:\n\n.. code-block:: text\n\n    $ $VENV/bin/pshell starter/development.ini\n\nPress ``Ctrl-D`` to exit the interactive shell (or ``Ctrl-Z`` on Windows).\n\n.. index::\n   pair: pshell; extending\n\n.. _extending_pshell:\n\nExtending the Shell\n~~~~~~~~~~~~~~~~~~~\n\nIt is convenient when using the interactive shell often to have some\nvariables significant to your application already loaded as globals when\nyou start the ``pshell``. To facilitate this, ``pshell`` will look for a\nspecial ``[pshell]`` section in your INI file and expose the subsequent\nkey/value pairs to the shell.  Each key is a variable name that will be\nglobal within the pshell session; each value is a :term:`dotted Python name`.\nIf specified, the special key ``setup`` should be a :term:`dotted Python name`\npointing to a callable that accepts the dictionary of globals that will\nbe loaded into the shell. This allows for some custom initializing code\nto be executed each time the ``pshell`` is run. The ``setup`` callable\ncan also be specified from the commandline using the ``--setup`` option\nwhich will override the key in the INI file.\n\nFor example, you want to expose your model to the shell, along with the\ndatabase session so that you can mutate the model on an actual database.\nHere, we'll assume your model is stored in the ``myapp.models`` package.\n\n.. code-block:: ini\n   :linenos:\n\n   [pshell]\n   setup = myapp.lib.pshell.setup\n   m = myapp.models\n   session = myapp.models.DBSession\n   t = transaction\n\nBy defining the ``setup`` callable, we will create the module\n``myapp.lib.pshell`` containing a callable named ``setup`` that will receive\nthe global environment before it is exposed to the shell. Here we mutate the\nenvironment's request as well as add a new value containing a WebTest version\nof the application to which we can easily submit requests.\n\n.. code-block:: python\n    :linenos:\n\n    # myapp/lib/pshell.py\n    from webtest import TestApp\n\n    def setup(env):\n        env['request'].host = 'www.example.com'\n        env['request'].scheme = 'https'\n        env['testapp'] = TestApp(env['app'])\n\nWhen this INI file is loaded, the extra variables ``m``, ``session`` and\n``t`` will be available for use immediately. Since a ``setup`` callable\nwas also specified, it is executed and a new variable ``testapp`` is\nexposed, and the request is configured to generate urls from the host\n``http://www.example.com``. For example:\n\n.. code-block:: text\n\n    $ $VENV/bin/pshell starter/development.ini\n    Python 2.6.5 (r265:79063, Apr 29 2010, 00:31:32) \n    [GCC 4.4.3] on linux2\n    Type \"help\" for more information.\n\n    Environment:\n      app          The WSGI application.\n      registry     Active Pyramid registry.\n      request      Active request object.\n      root         Root of the default resource tree.\n      root_factory Default root factory used to create `root`.\n      testapp      <webtest.TestApp object at ...>\n\n    Custom Variables:\n      m            myapp.models\n      session      myapp.models.DBSession\n      t            transaction\n\n    >>> testapp.get('/')\n    <200 OK text/html body='<!DOCTYPE...l>\\n'/3337>\n    >>> request.route_url('home')\n    'https://www.example.com/'\n\n.. index::\n   single: IPython\n   single: bpython\n\n.. _ipython_or_bpython:\n\nIPython or bpython\n~~~~~~~~~~~~~~~~~~\n\nIf you have `IPython <http://en.wikipedia.org/wiki/IPython>`_ and/or\n`bpython <http://bpython-interpreter.org/>`_ in\nthe interpreter you use to invoke the ``pshell`` command, ``pshell`` will \nautodiscover and use the first one found, in this order:\nIPython, bpython, standard Python interpreter. However you could \nspecifically invoke one of your choice with the ``-p choice`` or \n``--python-shell choice`` option.\n\n.. code-block:: text\n\n   $ $VENV/bin/pshell -p ipython | bpython | python development.ini#MyProject\n\nAlternative Shells\n~~~~~~~~~~~~~~~~~~\nIf you want to use a shell that isn't supported out of the box you can introduce\na new shell by registering an entrypoint in your setup.py:\n\n.. code-block:: python\n\n    setup(\n        entry_points = \"\"\"\\\n            [pyramid.pshell]\n            myshell=my_app.ptpython_shell_factory\n        \"\"\"\n    )\n\nand then your shell factory should return a function that accepts two arguments,\n``env`` and ``help``, this would look like this:\n\n.. code-block:: python\n\n    def ptpython_shell_factory():\n        try:\n            from ptpython.repl import embed\n            def PTPShell(banner, **kwargs):\n                print(banner)\n                return embed(**kwargs)\n        except ImportError:\n            return None\n\n        def shell(env, help):\n            PTPShell(banner=help, locals=env)\n\n        return shell\n\n\n.. index::\n   pair: routes; printing\n   single: proutes\n\n.. _displaying_application_routes:\n\nDisplaying All Application Routes\n---------------------------------\n\nYou can use the ``proutes`` command in a terminal window to print a summary\nof routes related to your application.  Much like the ``pshell``\ncommand (see :ref:`interactive_shell`), the ``proutes`` command\naccepts one argument with the format ``config_file#section_name``.  The\n``config_file`` is the path to your application's ``.ini`` file, and\n``section_name`` is the ``app`` section name inside the ``.ini`` file which\npoints to your application.  By default, the ``section_name`` is ``main`` and\ncan be omitted.\n\nFor example:\n\n.. code-block:: text\n   :linenos:\n\n   $ $VENV/bin/proutes development.ini\n   Name                       Pattern                     View\n   ----                       -------                     ----\n   debugtoolbar               /_debug_toolbar/*subpath    <wsgiapp>                                     *\n   __static/                  /static/*subpath            dummy_starter:static/                         *\n   __static2/                 /static2/*subpath           /var/www/static/                              *\n   __pdt_images/              /pdt_images/*subpath        pyramid_debugtoolbar:static/img/              *\n   a                          /                           <unknown>                                     *\n   no_view_attached           /                           <unknown>                                     *\n   route_and_view_attached    /                           app1.standard_views.route_and_view_attached   *\n   method_conflicts           /conflicts                  app1.standard_conflicts                       <route mismatch>\n   multiview                  /multiview                  app1.standard_views.multiview                 GET,PATCH\n   not_post                   /not_post                   app1.standard_views.multview                  !POST,*\n\n``proutes`` generates a table with four columns: *Name*, *Pattern*, *Method*,\nand *View*.  The items listed in the\nName column are route names, the items listed in the Pattern column are route\npatterns, and the items listed in the View column are representations of the\nview callable that will be invoked when a request matches the associated\nroute pattern.  The view column may show ``<unknown>`` if no associated view\ncallable could be found.  If no routes are configured within your\napplication, nothing will be printed to the console when ``proutes``\nis executed.\n\nIt is convenient when using the ``proutes`` often to configure which columns\nand the order you would like to view them. To facilitate this, ``proutes`` will\nlook for a special ``[proutes]`` section in your INI file and use those as\ndefaults.\n\nFor example you may remove request method and place the view first:\n\n.. code-block:: text\n  :linenos:\n\n    [proutes]\n    format = view\n             name\n             pattern\n\nYou can also separate the formats with commas or spaces:\n\n.. code-block:: text\n  :linenos:\n\n    [proutes]\n    format = view name pattern\n\n    [proutes]\n    format = view, name, pattern\n\nIf you want to temporarily configure the columns and order there is the\n``--format`` which is a comma separated list of columns you want to include. The\ncurrent available formats are ``name``, ``pattern``, ``view``, and ``method``.\n\n\n.. index::\n   pair: tweens; printing\n   single: ptweens\n\n.. _displaying_tweens:\n\nDisplaying \"Tweens\"\n-------------------\n\nA :term:`tween` is a bit of code that sits between the main Pyramid\napplication request handler and the WSGI application which calls it.  A user\ncan get a representation of both the implicit tween ordering (the ordering\nspecified by calls to :meth:`pyramid.config.Configurator.add_tween`) and the\nexplicit tween ordering (specified by the ``pyramid.tweens`` configuration\nsetting) orderings using the ``ptweens`` command.  Tween factories\nwill show up represented by their standard Python dotted name in the\n``ptweens`` output.\n\nFor example, here's the ``ptweens`` command run against a system\nconfigured without any explicit tweens:\n\n.. code-block:: text\n   :linenos:\n\n   $ $VENV/bin/ptweens development.ini\n   \"pyramid.tweens\" config value NOT set (implicitly ordered tweens used)\n\n   Implicit Tween Chain\n\n   Position    Name                                                Alias \n   --------    ----                                                -----\n   -           -                                                   INGRESS\n   0           pyramid_debugtoolbar.toolbar.toolbar_tween_factory  pdbt\n   1           pyramid.tweens.excview_tween_factory                excview\n   -           -                                                   MAIN\n\nHere's the ``ptweens`` command run against a system configured *with*\nexplicit tweens defined in its ``development.ini`` file:\n\n.. code-block:: text\n   :linenos:\n\n   $ ptweens development.ini\n   \"pyramid.tweens\" config value set (explicitly ordered tweens used)\n\n   Explicit Tween Chain (used)\n\n   Position    Name                                                             \n   --------    ----                                                             \n   -           INGRESS                                                          \n   0           starter.tween_factory2                                           \n   1           starter.tween_factory1                                           \n   2           pyramid.tweens.excview_tween_factory                             \n   -           MAIN                                                             \n\n   Implicit Tween Chain (not used)\n\n   Position    Name\n   --------    ----\n   -           INGRESS\n   0           pyramid_debugtoolbar.toolbar.toolbar_tween_factory\n   1           pyramid.tweens.excview_tween_factory\n   -           MAIN\n\nHere's the application configuration section of the ``development.ini`` used\nby the above ``ptweens`` command which reports that the explicit tween chain\nis used:\n\n.. code-block:: ini\n   :linenos:\n\n   [app:main]\n   use = egg:starter\n   reload_templates = true\n   debug_authorization = false\n   debug_notfound = false\n   debug_routematch = false\n   debug_templates = true\n   default_locale_name = en\n   pyramid.include = pyramid_debugtoolbar\n   pyramid.tweens = starter.tween_factory2\n                    starter.tween_factory1\n                    pyramid.tweens.excview_tween_factory\n\nSee :ref:`registering_tweens` for more information about tweens.\n\n.. index::\n   single: invoking a request\n   single: prequest\n\n.. _invoking_a_request:\n\nInvoking a Request\n------------------\n\nYou can use the ``prequest`` command-line utility to send a request to your\napplication and see the response body without starting a server.\n\nThere are two required arguments to ``prequest``:\n\n- The config file/section: follows the format ``config_file#section_name``\n  where ``config_file`` is the path to your application's ``.ini`` file and\n  ``section_name`` is the ``app`` section name inside the ``.ini`` file.  The\n  ``section_name`` is optional, it defaults to ``main``.  For example:\n  ``development.ini``.\n\n- The path: this should be the non-url-quoted path element of the URL to the\n  resource you'd like to be rendered on the server.  For example, ``/``.\n\nFor example::\n\n   $ $VENV/bin/prequest development.ini /\n\nThis will print the body of the response to the console on which it was\ninvoked.\n\nSeveral options are supported by ``prequest``.  These should precede any\nconfig file name or URL.\n\n``prequest`` has a ``-d`` (aka ``--display-headers``) option which prints the\nstatus and headers returned by the server before the output::\n\n   $ $VENV/bin/prequest -d development.ini /\n\nThis will print the status, then the headers, then the body of the response\nto the console.\n\nYou can add request header values by using the ``--header`` option::\n\n   $ $VENV/bin/prequest --header=Host:example.com development.ini /\n\nHeaders are added to the WSGI environment by converting them to their\nCGI/WSGI equivalents (e.g. ``Host=example.com`` will insert the ``HTTP_HOST``\nheader variable as the value ``example.com``).  Multiple ``--header`` options\ncan be supplied.  The special header value ``content-type`` sets the\n``CONTENT_TYPE`` in the WSGI environment.\n\nBy default, ``prequest`` sends a ``GET`` request.  You can change this by\nusing the ``-m`` (aka ``--method``) option.  ``GET``, ``HEAD``, ``POST`` and\n``DELETE`` are currently supported.  When you use ``POST``, the standard\ninput of the ``prequest`` process is used as the ``POST`` body::\n\n   $ $VENV/bin/prequest -mPOST development.ini / < somefile\n\nUsing Custom Arguments to Python when Running ``p*`` Scripts\n------------------------------------------------------------\n\n.. versionadded:: 1.5\n\nEach of Pyramid's console scripts (``pserve``, ``pviews``, etc) can be run\ndirectly using ``python -m``, allowing custom arguments to be sent to the\npython interpreter at runtime. For example::\n\n      python -3 -m pyramid.scripts.pserve development.ini\n\nShowing All Installed Distributions and their Versions\n------------------------------------------------------\n\n.. versionadded:: 1.5\n\nYou can use the ``pdistreport`` command to show the Pyramid version in use, the\nPython version in use, and all installed versions of Python distributions in\nyour Python environment::\n\n   $ $VENV/bin/pdistreport\n   Pyramid version: 1.5dev \n   Platform Linux-3.2.0-51-generic-x86_64-with-debian-wheezy-sid \n   Packages: \n     authapp 0.0 \n       /home/chrism/projects/foo/src/authapp \n     beautifulsoup4 4.1.3 \n       /home/chrism/projects/foo/lib/python2.7/site-packages/beautifulsoup4-4.1.3-py2.7.egg\n   ... more output ...\n\n``pdistreport`` takes no options.  Its output is useful to paste into a\npastebin when you are having problems and need someone with more familiarity\nwith Python packaging and distribution than you have to look at your\nenvironment.\n\n.. _writing_a_script:\n\nWriting a Script\n----------------\n\nAll web applications are, at their hearts, systems which accept a request and\nreturn a response.  When a request is accepted by a :app:`Pyramid`\napplication, the system receives state from the request which is later relied\non by your application code.  For example, one :term:`view callable` may assume\nit's working against a request that has a ``request.matchdict`` of a\nparticular composition, while another assumes a different composition of the\nmatchdict.\n\nIn the meantime, it's convenient to be able to write a Python script that can\nwork \"in a Pyramid environment\", for instance to update database tables used\nby your :app:`Pyramid` application.  But a \"real\" Pyramid environment doesn't\nhave a completely static state independent of a request; your application\n(and Pyramid itself) is almost always reliant on being able to obtain\ninformation from a request.  When you run a Python script that simply imports\ncode from your application and tries to run it, there just is no request\ndata, because there isn't any real web request.  Therefore some parts of your\napplication and some Pyramid APIs will not work.\n\nFor this reason, :app:`Pyramid` makes it possible to run a script in an\nenvironment much like the environment produced when a particular\n:term:`request` reaches your :app:`Pyramid` application.  This is achieved by\nusing the :func:`pyramid.paster.bootstrap` command in the body of your\nscript.\n\n.. versionadded:: 1.1\n   :func:`pyramid.paster.bootstrap`\n\nIn the simplest case, :func:`pyramid.paster.bootstrap` can be used with a\nsingle argument, which accepts the :term:`PasteDeploy` ``.ini`` file\nrepresenting Pyramid your application configuration as a single argument:\n\n.. code-block:: python\n\n   from pyramid.paster import bootstrap\n   env = bootstrap('/path/to/my/development.ini')\n   print(env['request'].route_url('home'))\n\n:func:`pyramid.paster.bootstrap` returns a dictionary containing\nframework-related information.  This dictionary will always contain a\n:term:`request` object as its ``request`` key.\n\nThe following keys are available in the ``env`` dictionary returned by\n:func:`pyramid.paster.bootstrap`:\n\nrequest\n\n    A :class:`pyramid.request.Request` object implying the current request\n    state for your script.\n\napp\n\n    The :term:`WSGI` application object generated by bootstrapping.\n\nroot\n\n    The :term:`resource` root of your :app:`Pyramid` application.  This is an\n    object generated by the :term:`root factory` configured in your\n    application.\n\nregistry\n\n    The :term:`application registry` of your :app:`Pyramid` application.\n\ncloser\n\n    A parameterless callable that can be used to pop an internal\n    :app:`Pyramid` threadlocal stack (used by\n    :func:`pyramid.threadlocal.get_current_registry` and\n    :func:`pyramid.threadlocal.get_current_request`) when your scripting job\n    is finished.\n\nLet's assume that the ``/path/to/my/development.ini`` file used in the\nexample above looks like so:\n\n.. code-block:: ini\n\n   [pipeline:main]\n   pipeline = translogger\n              another\n\n   [filter:translogger]\n   filter_app_factory = egg:Paste#translogger\n   setup_console_handler = False\n   logger_name = wsgi\n\n   [app:another]\n   use = egg:MyProject\n\nThe configuration loaded by the above bootstrap example will use the\nconfiguration implied by the ``[pipeline:main]`` section of your\nconfiguration file by default.  Specifying ``/path/to/my/development.ini`` is\nlogically equivalent to specifying ``/path/to/my/development.ini#main``.  In\nthis case, we'll be using a configuration that includes an ``app`` object\nwhich is wrapped in the Paste \"translogger\" :term:`middleware` (which logs\nrequests to the console).\n\nYou can also specify a particular *section* of the PasteDeploy ``.ini`` file\nto load instead of ``main``:\n\n.. code-block:: python\n\n   from pyramid.paster import bootstrap\n   env = bootstrap('/path/to/my/development.ini#another')\n   print(env['request'].route_url('home'))\n\nThe above example specifies the ``another`` ``app``, ``pipeline``, or\n``composite`` section of your PasteDeploy configuration file. The ``app``\nobject present in the ``env`` dictionary returned by\n:func:`pyramid.paster.bootstrap` will be a :app:`Pyramid` :term:`router`.\n\nChanging the Request\n~~~~~~~~~~~~~~~~~~~~\n\nBy default, Pyramid will generate a request object in the ``env`` dictionary\nfor the URL ``http://localhost:80/``. This means that any URLs generated\nby Pyramid during the execution of your script will be anchored here. This\nis generally not what you want.\n\nSo how do we make Pyramid generate the correct URLs?\n\nAssuming that you have a route configured in your application like so:\n\n.. code-block:: python\n\n   config.add_route('verify', '/verify/{code}')\n\nYou need to inform the Pyramid environment that the WSGI application is\nhandling requests from a certain base. For example, we want to simulate\nmounting our application at `https://example.com/prefix`, to ensure that\nthe generated URLs are correct for our deployment. This can be done by\neither mutating the resulting request object, or more simply by constructing\nthe desired request and passing it into :func:`~pyramid.paster.bootstrap`:\n\n.. code-block:: python\n\n   from pyramid.paster import bootstrap\n   from pyramid.request import Request\n\n   request = Request.blank('/', base_url='https://example.com/prefix')\n   env = bootstrap('/path/to/my/development.ini#another', request=request)\n   print(env['request'].application_url)\n   # will print 'https://example.com/prefix'\n\nNow you can readily use Pyramid's APIs for generating URLs:\n\n.. code-block:: python\n\n   env['request'].route_url('verify', code='1337')\n   # will return 'https://example.com/prefix/verify/1337'\n\nCleanup\n~~~~~~~\n\nWhen your scripting logic finishes, it's good manners to call the ``closer``\ncallback:\n\n.. code-block:: python\n\n   from pyramid.paster import bootstrap\n   env = bootstrap('/path/to/my/development.ini')\n\n   # .. do stuff ...\n\n   env['closer']()\n\nSetting Up Logging\n~~~~~~~~~~~~~~~~~~\n\nBy default, :func:`pyramid.paster.bootstrap` does not configure logging\nparameters present in the configuration file.  If you'd like to configure\nlogging based on ``[logger]`` and related sections in the configuration file,\nuse the following command:\n\n.. code-block:: python\n\n   import pyramid.paster\n   pyramid.paster.setup_logging('/path/to/my/development.ini')\n\nSee :ref:`logging_chapter` for more information on logging within\n:app:`Pyramid`.\n\n.. index::\n   single: console script\n\n.. _making_a_console_script:\n\nMaking Your Script into a Console Script\n----------------------------------------\n\nA \"console script\" is :term:`setuptools` terminology for a script that gets\ninstalled into the ``bin`` directory of a Python :term:`virtualenv` (or\n\"base\" Python environment) when a :term:`distribution` which houses that\nscript is installed.  Because it's installed into the ``bin`` directory of a\nvirtualenv when the distribution is installed, it's a convenient way to\npackage and distribute functionality that you can call from the command-line.\nIt's often more convenient to create a console script than it is to create a\n``.py`` script and instruct people to call it with the \"right\" Python\ninterpreter.  A console script generates a file that lives in ``bin``, and when it's\ninvoked it will always use the \"right\" Python environment, which means it\nwill always be invoked in an environment where all the libraries it needs\n(such as Pyramid) are available.\n\nIn general, you can make your script into a console script by doing the\nfollowing:\n\n- Use an existing distribution (such as one you've already created via\n  ``pcreate``) or create a new distribution that possesses at least one\n  package or module.  It should, within any module within the distribution,\n  house a callable (usually a function) that takes no arguments and which\n  runs any of the code you wish to run.\n\n- Add a ``[console_scripts]`` section to the ``entry_points`` argument of the\n  distribution which creates a mapping between a script name and a dotted\n  name representing the callable you added to your distribution.\n\n- Run ``setup.py develop``, ``setup.py install``, or ``easy_install`` to get\n  your distribution reinstalled.  When you reinstall your distribution, a\n  file representing the script that you named in the last step will be in the\n  ``bin`` directory of the virtualenv in which you installed the\n  distribution.  It will be executable.  Invoking it from a terminal will\n  execute your callable.\n\nAs an example, let's create some code that can be invoked by a console script\nthat prints the deployment settings of a Pyramid application.  To do so,\nwe'll pretend you have a distribution with a package in it named\n``myproject``.  Within this package, we'll pretend you've added a\n``scripts.py`` module which contains the following code:\n\n.. code-block:: python\n   :linenos:\n\n   # myproject.scripts module\n\n   import optparse\n   import sys\n   import textwrap\n\n   from pyramid.paster import bootstrap\n\n   def settings_show():\n       description = \"\"\"\\\n       Print the deployment settings for a Pyramid application.  Example:\n       'show_settings deployment.ini'\n       \"\"\"\n       usage = \"usage: %prog config_uri\"\n       parser = optparse.OptionParser(\n           usage=usage,\n           description=textwrap.dedent(description)\n           )\n       parser.add_option(\n           '-o', '--omit',\n           dest='omit',\n           metavar='PREFIX',\n           type='string',\n           action='append',\n           help=(\"Omit settings which start with PREFIX (you can use this \"\n                 \"option multiple times)\")\n           )\n\n       options, args = parser.parse_args(sys.argv[1:])\n       if not len(args) >= 1:\n           print('You must provide at least one argument')\n           return 2\n       config_uri = args[0]\n       omit = options.omit\n       if omit is None:\n           omit = []\n       env = bootstrap(config_uri)\n       settings, closer = env['registry'].settings, env['closer']\n       try:\n           for k, v in settings.items():\n               if any([k.startswith(x) for x in omit]):\n                   continue\n               print('%-40s     %-20s' % (k, v))\n       finally:\n           closer()\n\nThis script uses the Python ``optparse`` module to allow us to make sense out\nof extra arguments passed to the script.  It uses the\n:func:`pyramid.paster.bootstrap` function to get information about the\napplication defined by a config file, and prints the deployment settings\ndefined in that config file.\n\nAfter adding this script to the package, you'll need to tell your\ndistribution's ``setup.py`` about its existence.  Within your distribution's\ntop-level directory your ``setup.py`` file will look something like this:\n\n.. code-block:: python\n   :linenos:\n\n   import os\n\n   from setuptools import setup, find_packages\n\n   here = os.path.abspath(os.path.dirname(__file__))\n   with open(os.path.join(here, 'README.txt')) as f:\n       README = f.read()\n   with open(os.path.join(here, 'CHANGES.txt')) as f:\n       CHANGES = f.read()\n\n   requires = ['pyramid', 'pyramid_debugtoolbar']\n\n   setup(name='MyProject',\n         version='0.0',\n         description='My project',\n         long_description=README + '\\n\\n' +  CHANGES,\n         classifiers=[\n           \"Programming Language :: Python\",\n           \"Framework :: Pylons\",\n           \"Topic :: Internet :: WWW/HTTP\",\n           \"Topic :: Internet :: WWW/HTTP :: WSGI :: Application\",\n           ],\n         author='',\n         author_email='',\n         url='',\n         keywords='web pyramid pylons',\n         packages=find_packages(),\n         include_package_data=True,\n         zip_safe=False,\n         install_requires=requires,\n         tests_require=requires,\n         test_suite=\"myproject\",\n         entry_points = \"\"\"\\\n         [paste.app_factory]\n         main = myproject:main\n         \"\"\",\n         )\n\nWe're going to change the setup.py file to add an ``[console_scripts]``\nsection with in the ``entry_points`` string.  Within this section, you should\nspecify a ``scriptname = dotted.path.to:yourfunction`` line.  For example::\n\n  [console_scripts]\n  show_settings = myproject.scripts:settings_show\n\nThe ``show_settings`` name will be the name of the script that is installed\ninto ``bin``.  The colon (``:``) between ``myproject.scripts`` and\n``settings_show`` above indicates that ``myproject.scripts`` is a Python\nmodule, and ``settings_show`` is the function in that module which contains\nthe code you'd like to run as the result of someone invoking the\n``show_settings`` script from their command line.\n\nThe result will be something like:\n\n.. code-block:: python\n   :linenos:\n\n   import os\n\n   from setuptools import setup, find_packages\n\n   here = os.path.abspath(os.path.dirname(__file__))\n   with open(os.path.join(here, 'README.txt')) as f:\n       README = f.read()\n   with open(os.path.join(here, 'CHANGES.txt')) as f:\n       CHANGES = f.read()\n\n   requires = ['pyramid', 'pyramid_debugtoolbar']\n\n   setup(name='MyProject',\n         version='0.0',\n         description='My project',\n         long_description=README + '\\n\\n' +  CHANGES,\n         classifiers=[\n           \"Programming Language :: Python\",\n           \"Framework :: Pylons\",\n           \"Topic :: Internet :: WWW/HTTP\",\n           \"Topic :: Internet :: WWW/HTTP :: WSGI :: Application\",\n           ],\n         author='',\n         author_email='',\n         url='',\n         keywords='web pyramid pylons',\n         packages=find_packages(),\n         include_package_data=True,\n         zip_safe=False,\n         install_requires=requires,\n         tests_require=requires,\n         test_suite=\"myproject\",\n         entry_points = \"\"\"\\\n         [paste.app_factory]\n         main = myproject:main\n         [console_scripts]\n         show_settings = myproject.scripts:settings_show\n         \"\"\",\n         )\n\nOnce you've done this, invoking ``$$VENV/bin/python setup.py\ndevelop`` will install a file named ``show_settings`` into the\n``$somevirtualenv/bin`` directory with a small bit of Python code that points\nto your entry point.  It will be executable.  Running it without any\narguments will print an error and exit.  Running it with a single argument\nthat is the path of a config file will print the settings.  Running it with\nan ``--omit=foo`` argument will omit the settings that have keys that start\nwith ``foo``.  Running it with two \"omit\" options (e.g. ``--omit=foo\n--omit=bar``) will omit all settings that have keys that start with either\n``foo`` or ``bar``::\n\n  $ $VENV/bin/show_settings development.ini --omit=pyramid --omit=debugtoolbar\n  debug_routematch                             False               \n  debug_templates                              True                \n  reload_templates                             True                \n  mako.directories                             []                  \n  debug_notfound                               False               \n  default_locale_name                          en                  \n  reload_resources                             False               \n  debug_authorization                          False               \n  reload_assets                                False               \n  prevent_http_cache                           False               \n\nPyramid's ``pserve``, ``pcreate``, ``pshell``, ``prequest``, ``ptweens`` and\nother ``p*`` scripts are implemented as console scripts.  When you invoke one\nof those, you are using a console script.\n",
            "new_file_content": ".. _command_line_chapter:\n\nCommand-Line Pyramid\n====================\n\nYour :app:`Pyramid` application can be controlled and inspected using a\nvariety of command-line utilities.  These utilities are documented in this\nchapter.\n\n.. index::\n   pair: matching views; printing\n   single: pviews\n\n.. _displaying_matching_views:\n\nDisplaying Matching Views for a Given URL\n-----------------------------------------\n\nFor a big application with several views, it can be hard to keep the view\nconfiguration details in your head, even if you defined all the views\nyourself. You can use the ``pviews`` command in a terminal window to\nprint a summary of matching routes and views for a given URL in your\napplication. The ``pviews`` command accepts two arguments. The first\nargument to ``pviews`` is the path to your application's ``.ini`` file and\nsection name inside the ``.ini`` file which points to your application.  This\nshould be of the format ``config_file#section_name``. The second argument is\nthe URL to test for matching views.  The ``section_name`` may be omitted; if\nit is, it's considered to be ``main``.\n\nHere is an example for a simple view configuration using :term:`traversal`:\n\n.. code-block:: text\n   :linenos:\n\n   $ $VENV/bin/pviews development.ini#tutorial /FrontPage\n\n   URL = /FrontPage\n\n       context: <tutorial.models.Page object at 0xa12536c>\n       view name:\n\n       View:\n       -----\n       tutorial.views.view_page\n       required permission = view\n\nThe output always has the requested URL at the top and below that all the\nviews that matched with their view configuration details. In this example\nonly one view matches, so there is just a single *View* section. For each\nmatching view, the full code path to the associated view callable is shown,\nalong with any permissions and predicates that are part of that view\nconfiguration.\n\nA more complex configuration might generate something like this:\n\n.. code-block:: text\n   :linenos:\n\n   $ $VENV/bin/pviews development.ini#shootout /about\n\n   URL = /about\n\n       context: <shootout.models.RootFactory object at 0xa56668c>\n       view name: about\n\n       Route:\n       ------\n       route name: about\n       route pattern: /about\n       route path: /about\n       subpath:\n       route predicates (request method = GET)\n\n           View:\n           -----\n           shootout.views.about_view\n           required permission = view\n           view predicates (request_param testing, header X/header)\n\n       Route:\n       ------\n       route name: about_post\n       route pattern: /about\n       route path: /about\n       subpath:\n       route predicates (request method = POST)\n\n           View:\n           -----\n           shootout.views.about_view_post\n           required permission = view\n           view predicates (request_param test)\n\n           View:\n           -----\n           shootout.views.about_view_post2\n           required permission = view\n           view predicates (request_param test2)\n\nIn this case, we are dealing with a :term:`URL dispatch` application. This\nspecific URL has two matching routes. The matching route information is\ndisplayed first, followed by any views that are associated with that route.\nAs you can see from the second matching route output, a route can be\nassociated with more than one view.\n\nFor a URL that doesn't match any views, ``pviews`` will simply print out a\n*Not found* message.\n\n\n.. index::\n   single: interactive shell\n   single: IPython\n   single: pshell\n   single: bpython\n\n.. _interactive_shell:\n\nThe Interactive Shell\n---------------------\n\nOnce you've installed your program for development using ``setup.py\ndevelop``, you can use an interactive Python shell to execute expressions in\na Python environment exactly like the one that will be used when your\napplication runs \"for real\".  To do so, use the ``pshell`` command line\nutility.\n\nThe argument to ``pshell`` follows the format ``config_file#section_name``\nwhere ``config_file`` is the path to your application's ``.ini`` file and\n``section_name`` is the ``app`` section name inside the ``.ini`` file which\npoints to your application.  For example, if your application ``.ini`` file\nmight have a ``[app:main]`` section that looks like so:\n\n.. code-block:: ini\n   :linenos:\n\n   [app:main]\n   use = egg:MyProject\n   pyramid.reload_templates = true\n   pyramid.debug_authorization = false\n   pyramid.debug_notfound = false\n   pyramid.debug_templates = true\n   pyramid.default_locale_name = en\n\nIf so, you can use the following command to invoke a debug shell using the\nname ``main`` as a section name:\n\n.. code-block:: text\n\n    $ $VENV/bin/pshell starter/development.ini#main\n    Python 2.6.5 (r265:79063, Apr 29 2010, 00:31:32) \n    [GCC 4.4.3] on linux2\n    Type \"help\" for more information.\n\n    Environment:\n      app          The WSGI application.\n      registry     Active Pyramid registry.\n      request      Active request object.\n      root         Root of the default resource tree.\n      root_factory Default root factory used to create `root`.\n\n    >>> root\n    <myproject.resources.MyResource object at 0x445270>\n    >>> registry\n    <Registry myproject>\n    >>> registry.settings['pyramid.debug_notfound']\n    False\n    >>> from myproject.views import my_view\n    >>> from pyramid.request import Request\n    >>> r = Request.blank('/')\n    >>> my_view(r)\n    {'project': 'myproject'}\n\nThe WSGI application that is loaded will be available in the shell as the\n``app`` global. Also, if the application that is loaded is the :app:`Pyramid`\napp with no surrounding :term:`middleware`, the ``root`` object returned by\nthe default :term:`root factory`, ``registry``, and ``request`` will be\navailable.\n\nYou can also simply rely on the ``main`` default section name by omitting any\nhash after the filename:\n\n.. code-block:: text\n\n    $ $VENV/bin/pshell starter/development.ini\n\nPress ``Ctrl-D`` to exit the interactive shell (or ``Ctrl-Z`` on Windows).\n\n.. index::\n   pair: pshell; extending\n\n.. _extending_pshell:\n\nExtending the Shell\n~~~~~~~~~~~~~~~~~~~\n\nIt is convenient when using the interactive shell often to have some\nvariables significant to your application already loaded as globals when\nyou start the ``pshell``. To facilitate this, ``pshell`` will look for a\nspecial ``[pshell]`` section in your INI file and expose the subsequent\nkey/value pairs to the shell.  Each key is a variable name that will be\nglobal within the pshell session; each value is a :term:`dotted Python name`.\nIf specified, the special key ``setup`` should be a :term:`dotted Python name`\npointing to a callable that accepts the dictionary of globals that will\nbe loaded into the shell. This allows for some custom initializing code\nto be executed each time the ``pshell`` is run. The ``setup`` callable\ncan also be specified from the commandline using the ``--setup`` option\nwhich will override the key in the INI file.\n\nFor example, you want to expose your model to the shell, along with the\ndatabase session so that you can mutate the model on an actual database.\nHere, we'll assume your model is stored in the ``myapp.models`` package.\n\n.. code-block:: ini\n   :linenos:\n\n   [pshell]\n   setup = myapp.lib.pshell.setup\n   m = myapp.models\n   session = myapp.models.DBSession\n   t = transaction\n\nBy defining the ``setup`` callable, we will create the module\n``myapp.lib.pshell`` containing a callable named ``setup`` that will receive\nthe global environment before it is exposed to the shell. Here we mutate the\nenvironment's request as well as add a new value containing a WebTest version\nof the application to which we can easily submit requests.\n\n.. code-block:: python\n    :linenos:\n\n    # myapp/lib/pshell.py\n    from webtest import TestApp\n\n    def setup(env):\n        env['request'].host = 'www.example.com'\n        env['request'].scheme = 'https'\n        env['testapp'] = TestApp(env['app'])\n\nWhen this INI file is loaded, the extra variables ``m``, ``session`` and\n``t`` will be available for use immediately. Since a ``setup`` callable\nwas also specified, it is executed and a new variable ``testapp`` is\nexposed, and the request is configured to generate urls from the host\n``http://www.example.com``. For example:\n\n.. code-block:: text\n\n    $ $VENV/bin/pshell starter/development.ini\n    Python 2.6.5 (r265:79063, Apr 29 2010, 00:31:32)\n    [GCC 4.4.3] on linux2\n    Type \"help\" for more information.\n\n    Environment:\n      app          The WSGI application.\n      registry     Active Pyramid registry.\n      request      Active request object.\n      root         Root of the default resource tree.\n      root_factory Default root factory used to create `root`.\n      testapp      <webtest.TestApp object at ...>\n\n    Custom Variables:\n      m            myapp.models\n      session      myapp.models.DBSession\n      t            transaction\n\n    >>> testapp.get('/')\n    <200 OK text/html body='<!DOCTYPE...l>\\n'/3337>\n    >>> request.route_url('home')\n    'https://www.example.com/'\n\n.. index::\n   single: IPython\n   single: bpython\n\n.. _ipython_or_bpython:\n\nIPython or bpython\n~~~~~~~~~~~~~~~~~~\n\nIf you have `IPython <http://en.wikipedia.org/wiki/IPython>`_ and/or\n`bpython <http://bpython-interpreter.org/>`_ in\nthe interpreter you use to invoke the ``pshell`` command, ``pshell`` will\nautodiscover and use the first one found, in this order:\nIPython, bpython, standard Python interpreter. However you could\nspecifically invoke one of your choice with the ``-p choice`` or\n``--python-shell choice`` option.\n\n.. code-block:: text\n\n   $ $VENV/bin/pshell -p ipython | bpython | python development.ini#MyProject\n\nAlternative Shells\n~~~~~~~~~~~~~~~~~~\nIf you want to use a shell that isn't supported out of the box you can introduce\na new shell by registering an entrypoint in your setup.py:\n\n.. code-block:: python\n\n    setup(\n        entry_points = \"\"\"\\\n            [pyramid.pshell]\n            myshell=my_app.ptpython_shell_factory\n        \"\"\"\n    )\n\nand then your shell factory should return a function that accepts two arguments,\n``env`` and ``help``, this would look like this:\n\n.. code-block:: python\n\n    def ptpython_shell_factory():\n        from ptpython.repl import embed\n        def PTPShell(banner, **kwargs):\n            print(banner)\n            return embed(**kwargs)\n\n        def shell(env, help):\n            PTPShell(banner=help, locals=env)\n\n        return shell\n\n.. index::\n   pair: routes; printing\n   single: proutes\n\n.. _displaying_application_routes:\n\nDisplaying All Application Routes\n---------------------------------\n\nYou can use the ``proutes`` command in a terminal window to print a summary\nof routes related to your application.  Much like the ``pshell``\ncommand (see :ref:`interactive_shell`), the ``proutes`` command\naccepts one argument with the format ``config_file#section_name``.  The\n``config_file`` is the path to your application's ``.ini`` file, and\n``section_name`` is the ``app`` section name inside the ``.ini`` file which\npoints to your application.  By default, the ``section_name`` is ``main`` and\ncan be omitted.\n\nFor example:\n\n.. code-block:: text\n   :linenos:\n\n   $ $VENV/bin/proutes development.ini\n   Name                       Pattern                     View\n   ----                       -------                     ----\n   debugtoolbar               /_debug_toolbar/*subpath    <wsgiapp>                                     *\n   __static/                  /static/*subpath            dummy_starter:static/                         *\n   __static2/                 /static2/*subpath           /var/www/static/                              *\n   __pdt_images/              /pdt_images/*subpath        pyramid_debugtoolbar:static/img/              *\n   a                          /                           <unknown>                                     *\n   no_view_attached           /                           <unknown>                                     *\n   route_and_view_attached    /                           app1.standard_views.route_and_view_attached   *\n   method_conflicts           /conflicts                  app1.standard_conflicts                       <route mismatch>\n   multiview                  /multiview                  app1.standard_views.multiview                 GET,PATCH\n   not_post                   /not_post                   app1.standard_views.multview                  !POST,*\n\n``proutes`` generates a table with four columns: *Name*, *Pattern*, *Method*,\nand *View*.  The items listed in the\nName column are route names, the items listed in the Pattern column are route\npatterns, and the items listed in the View column are representations of the\nview callable that will be invoked when a request matches the associated\nroute pattern.  The view column may show ``<unknown>`` if no associated view\ncallable could be found.  If no routes are configured within your\napplication, nothing will be printed to the console when ``proutes``\nis executed.\n\nIt is convenient when using the ``proutes`` often to configure which columns\nand the order you would like to view them. To facilitate this, ``proutes`` will\nlook for a special ``[proutes]`` section in your INI file and use those as\ndefaults.\n\nFor example you may remove request method and place the view first:\n\n.. code-block:: text\n  :linenos:\n\n    [proutes]\n    format = view\n             name\n             pattern\n\nYou can also separate the formats with commas or spaces:\n\n.. code-block:: text\n  :linenos:\n\n    [proutes]\n    format = view name pattern\n\n    [proutes]\n    format = view, name, pattern\n\nIf you want to temporarily configure the columns and order there is the\n``--format`` which is a comma separated list of columns you want to include. The\ncurrent available formats are ``name``, ``pattern``, ``view``, and ``method``.\n\n\n.. index::\n   pair: tweens; printing\n   single: ptweens\n\n.. _displaying_tweens:\n\nDisplaying \"Tweens\"\n-------------------\n\nA :term:`tween` is a bit of code that sits between the main Pyramid\napplication request handler and the WSGI application which calls it.  A user\ncan get a representation of both the implicit tween ordering (the ordering\nspecified by calls to :meth:`pyramid.config.Configurator.add_tween`) and the\nexplicit tween ordering (specified by the ``pyramid.tweens`` configuration\nsetting) orderings using the ``ptweens`` command.  Tween factories\nwill show up represented by their standard Python dotted name in the\n``ptweens`` output.\n\nFor example, here's the ``ptweens`` command run against a system\nconfigured without any explicit tweens:\n\n.. code-block:: text\n   :linenos:\n\n   $ $VENV/bin/ptweens development.ini\n   \"pyramid.tweens\" config value NOT set (implicitly ordered tweens used)\n\n   Implicit Tween Chain\n\n   Position    Name                                                Alias \n   --------    ----                                                -----\n   -           -                                                   INGRESS\n   0           pyramid_debugtoolbar.toolbar.toolbar_tween_factory  pdbt\n   1           pyramid.tweens.excview_tween_factory                excview\n   -           -                                                   MAIN\n\nHere's the ``ptweens`` command run against a system configured *with*\nexplicit tweens defined in its ``development.ini`` file:\n\n.. code-block:: text\n   :linenos:\n\n   $ ptweens development.ini\n   \"pyramid.tweens\" config value set (explicitly ordered tweens used)\n\n   Explicit Tween Chain (used)\n\n   Position    Name                                                             \n   --------    ----                                                             \n   -           INGRESS                                                          \n   0           starter.tween_factory2                                           \n   1           starter.tween_factory1                                           \n   2           pyramid.tweens.excview_tween_factory                             \n   -           MAIN                                                             \n\n   Implicit Tween Chain (not used)\n\n   Position    Name\n   --------    ----\n   -           INGRESS\n   0           pyramid_debugtoolbar.toolbar.toolbar_tween_factory\n   1           pyramid.tweens.excview_tween_factory\n   -           MAIN\n\nHere's the application configuration section of the ``development.ini`` used\nby the above ``ptweens`` command which reports that the explicit tween chain\nis used:\n\n.. code-block:: ini\n   :linenos:\n\n   [app:main]\n   use = egg:starter\n   reload_templates = true\n   debug_authorization = false\n   debug_notfound = false\n   debug_routematch = false\n   debug_templates = true\n   default_locale_name = en\n   pyramid.include = pyramid_debugtoolbar\n   pyramid.tweens = starter.tween_factory2\n                    starter.tween_factory1\n                    pyramid.tweens.excview_tween_factory\n\nSee :ref:`registering_tweens` for more information about tweens.\n\n.. index::\n   single: invoking a request\n   single: prequest\n\n.. _invoking_a_request:\n\nInvoking a Request\n------------------\n\nYou can use the ``prequest`` command-line utility to send a request to your\napplication and see the response body without starting a server.\n\nThere are two required arguments to ``prequest``:\n\n- The config file/section: follows the format ``config_file#section_name``\n  where ``config_file`` is the path to your application's ``.ini`` file and\n  ``section_name`` is the ``app`` section name inside the ``.ini`` file.  The\n  ``section_name`` is optional, it defaults to ``main``.  For example:\n  ``development.ini``.\n\n- The path: this should be the non-url-quoted path element of the URL to the\n  resource you'd like to be rendered on the server.  For example, ``/``.\n\nFor example::\n\n   $ $VENV/bin/prequest development.ini /\n\nThis will print the body of the response to the console on which it was\ninvoked.\n\nSeveral options are supported by ``prequest``.  These should precede any\nconfig file name or URL.\n\n``prequest`` has a ``-d`` (aka ``--display-headers``) option which prints the\nstatus and headers returned by the server before the output::\n\n   $ $VENV/bin/prequest -d development.ini /\n\nThis will print the status, then the headers, then the body of the response\nto the console.\n\nYou can add request header values by using the ``--header`` option::\n\n   $ $VENV/bin/prequest --header=Host:example.com development.ini /\n\nHeaders are added to the WSGI environment by converting them to their\nCGI/WSGI equivalents (e.g. ``Host=example.com`` will insert the ``HTTP_HOST``\nheader variable as the value ``example.com``).  Multiple ``--header`` options\ncan be supplied.  The special header value ``content-type`` sets the\n``CONTENT_TYPE`` in the WSGI environment.\n\nBy default, ``prequest`` sends a ``GET`` request.  You can change this by\nusing the ``-m`` (aka ``--method``) option.  ``GET``, ``HEAD``, ``POST`` and\n``DELETE`` are currently supported.  When you use ``POST``, the standard\ninput of the ``prequest`` process is used as the ``POST`` body::\n\n   $ $VENV/bin/prequest -mPOST development.ini / < somefile\n\nUsing Custom Arguments to Python when Running ``p*`` Scripts\n------------------------------------------------------------\n\n.. versionadded:: 1.5\n\nEach of Pyramid's console scripts (``pserve``, ``pviews``, etc) can be run\ndirectly using ``python -m``, allowing custom arguments to be sent to the\npython interpreter at runtime. For example::\n\n      python -3 -m pyramid.scripts.pserve development.ini\n\nShowing All Installed Distributions and their Versions\n------------------------------------------------------\n\n.. versionadded:: 1.5\n\nYou can use the ``pdistreport`` command to show the Pyramid version in use, the\nPython version in use, and all installed versions of Python distributions in\nyour Python environment::\n\n   $ $VENV/bin/pdistreport\n   Pyramid version: 1.5dev \n   Platform Linux-3.2.0-51-generic-x86_64-with-debian-wheezy-sid \n   Packages: \n     authapp 0.0 \n       /home/chrism/projects/foo/src/authapp \n     beautifulsoup4 4.1.3 \n       /home/chrism/projects/foo/lib/python2.7/site-packages/beautifulsoup4-4.1.3-py2.7.egg\n   ... more output ...\n\n``pdistreport`` takes no options.  Its output is useful to paste into a\npastebin when you are having problems and need someone with more familiarity\nwith Python packaging and distribution than you have to look at your\nenvironment.\n\n.. _writing_a_script:\n\nWriting a Script\n----------------\n\nAll web applications are, at their hearts, systems which accept a request and\nreturn a response.  When a request is accepted by a :app:`Pyramid`\napplication, the system receives state from the request which is later relied\non by your application code.  For example, one :term:`view callable` may assume\nit's working against a request that has a ``request.matchdict`` of a\nparticular composition, while another assumes a different composition of the\nmatchdict.\n\nIn the meantime, it's convenient to be able to write a Python script that can\nwork \"in a Pyramid environment\", for instance to update database tables used\nby your :app:`Pyramid` application.  But a \"real\" Pyramid environment doesn't\nhave a completely static state independent of a request; your application\n(and Pyramid itself) is almost always reliant on being able to obtain\ninformation from a request.  When you run a Python script that simply imports\ncode from your application and tries to run it, there just is no request\ndata, because there isn't any real web request.  Therefore some parts of your\napplication and some Pyramid APIs will not work.\n\nFor this reason, :app:`Pyramid` makes it possible to run a script in an\nenvironment much like the environment produced when a particular\n:term:`request` reaches your :app:`Pyramid` application.  This is achieved by\nusing the :func:`pyramid.paster.bootstrap` command in the body of your\nscript.\n\n.. versionadded:: 1.1\n   :func:`pyramid.paster.bootstrap`\n\nIn the simplest case, :func:`pyramid.paster.bootstrap` can be used with a\nsingle argument, which accepts the :term:`PasteDeploy` ``.ini`` file\nrepresenting Pyramid your application configuration as a single argument:\n\n.. code-block:: python\n\n   from pyramid.paster import bootstrap\n   env = bootstrap('/path/to/my/development.ini')\n   print(env['request'].route_url('home'))\n\n:func:`pyramid.paster.bootstrap` returns a dictionary containing\nframework-related information.  This dictionary will always contain a\n:term:`request` object as its ``request`` key.\n\nThe following keys are available in the ``env`` dictionary returned by\n:func:`pyramid.paster.bootstrap`:\n\nrequest\n\n    A :class:`pyramid.request.Request` object implying the current request\n    state for your script.\n\napp\n\n    The :term:`WSGI` application object generated by bootstrapping.\n\nroot\n\n    The :term:`resource` root of your :app:`Pyramid` application.  This is an\n    object generated by the :term:`root factory` configured in your\n    application.\n\nregistry\n\n    The :term:`application registry` of your :app:`Pyramid` application.\n\ncloser\n\n    A parameterless callable that can be used to pop an internal\n    :app:`Pyramid` threadlocal stack (used by\n    :func:`pyramid.threadlocal.get_current_registry` and\n    :func:`pyramid.threadlocal.get_current_request`) when your scripting job\n    is finished.\n\nLet's assume that the ``/path/to/my/development.ini`` file used in the\nexample above looks like so:\n\n.. code-block:: ini\n\n   [pipeline:main]\n   pipeline = translogger\n              another\n\n   [filter:translogger]\n   filter_app_factory = egg:Paste#translogger\n   setup_console_handler = False\n   logger_name = wsgi\n\n   [app:another]\n   use = egg:MyProject\n\nThe configuration loaded by the above bootstrap example will use the\nconfiguration implied by the ``[pipeline:main]`` section of your\nconfiguration file by default.  Specifying ``/path/to/my/development.ini`` is\nlogically equivalent to specifying ``/path/to/my/development.ini#main``.  In\nthis case, we'll be using a configuration that includes an ``app`` object\nwhich is wrapped in the Paste \"translogger\" :term:`middleware` (which logs\nrequests to the console).\n\nYou can also specify a particular *section* of the PasteDeploy ``.ini`` file\nto load instead of ``main``:\n\n.. code-block:: python\n\n   from pyramid.paster import bootstrap\n   env = bootstrap('/path/to/my/development.ini#another')\n   print(env['request'].route_url('home'))\n\nThe above example specifies the ``another`` ``app``, ``pipeline``, or\n``composite`` section of your PasteDeploy configuration file. The ``app``\nobject present in the ``env`` dictionary returned by\n:func:`pyramid.paster.bootstrap` will be a :app:`Pyramid` :term:`router`.\n\nChanging the Request\n~~~~~~~~~~~~~~~~~~~~\n\nBy default, Pyramid will generate a request object in the ``env`` dictionary\nfor the URL ``http://localhost:80/``. This means that any URLs generated\nby Pyramid during the execution of your script will be anchored here. This\nis generally not what you want.\n\nSo how do we make Pyramid generate the correct URLs?\n\nAssuming that you have a route configured in your application like so:\n\n.. code-block:: python\n\n   config.add_route('verify', '/verify/{code}')\n\nYou need to inform the Pyramid environment that the WSGI application is\nhandling requests from a certain base. For example, we want to simulate\nmounting our application at `https://example.com/prefix`, to ensure that\nthe generated URLs are correct for our deployment. This can be done by\neither mutating the resulting request object, or more simply by constructing\nthe desired request and passing it into :func:`~pyramid.paster.bootstrap`:\n\n.. code-block:: python\n\n   from pyramid.paster import bootstrap\n   from pyramid.request import Request\n\n   request = Request.blank('/', base_url='https://example.com/prefix')\n   env = bootstrap('/path/to/my/development.ini#another', request=request)\n   print(env['request'].application_url)\n   # will print 'https://example.com/prefix'\n\nNow you can readily use Pyramid's APIs for generating URLs:\n\n.. code-block:: python\n\n   env['request'].route_url('verify', code='1337')\n   # will return 'https://example.com/prefix/verify/1337'\n\nCleanup\n~~~~~~~\n\nWhen your scripting logic finishes, it's good manners to call the ``closer``\ncallback:\n\n.. code-block:: python\n\n   from pyramid.paster import bootstrap\n   env = bootstrap('/path/to/my/development.ini')\n\n   # .. do stuff ...\n\n   env['closer']()\n\nSetting Up Logging\n~~~~~~~~~~~~~~~~~~\n\nBy default, :func:`pyramid.paster.bootstrap` does not configure logging\nparameters present in the configuration file.  If you'd like to configure\nlogging based on ``[logger]`` and related sections in the configuration file,\nuse the following command:\n\n.. code-block:: python\n\n   import pyramid.paster\n   pyramid.paster.setup_logging('/path/to/my/development.ini')\n\nSee :ref:`logging_chapter` for more information on logging within\n:app:`Pyramid`.\n\n.. index::\n   single: console script\n\n.. _making_a_console_script:\n\nMaking Your Script into a Console Script\n----------------------------------------\n\nA \"console script\" is :term:`setuptools` terminology for a script that gets\ninstalled into the ``bin`` directory of a Python :term:`virtualenv` (or\n\"base\" Python environment) when a :term:`distribution` which houses that\nscript is installed.  Because it's installed into the ``bin`` directory of a\nvirtualenv when the distribution is installed, it's a convenient way to\npackage and distribute functionality that you can call from the command-line.\nIt's often more convenient to create a console script than it is to create a\n``.py`` script and instruct people to call it with the \"right\" Python\ninterpreter.  A console script generates a file that lives in ``bin``, and when it's\ninvoked it will always use the \"right\" Python environment, which means it\nwill always be invoked in an environment where all the libraries it needs\n(such as Pyramid) are available.\n\nIn general, you can make your script into a console script by doing the\nfollowing:\n\n- Use an existing distribution (such as one you've already created via\n  ``pcreate``) or create a new distribution that possesses at least one\n  package or module.  It should, within any module within the distribution,\n  house a callable (usually a function) that takes no arguments and which\n  runs any of the code you wish to run.\n\n- Add a ``[console_scripts]`` section to the ``entry_points`` argument of the\n  distribution which creates a mapping between a script name and a dotted\n  name representing the callable you added to your distribution.\n\n- Run ``setup.py develop``, ``setup.py install``, or ``easy_install`` to get\n  your distribution reinstalled.  When you reinstall your distribution, a\n  file representing the script that you named in the last step will be in the\n  ``bin`` directory of the virtualenv in which you installed the\n  distribution.  It will be executable.  Invoking it from a terminal will\n  execute your callable.\n\nAs an example, let's create some code that can be invoked by a console script\nthat prints the deployment settings of a Pyramid application.  To do so,\nwe'll pretend you have a distribution with a package in it named\n``myproject``.  Within this package, we'll pretend you've added a\n``scripts.py`` module which contains the following code:\n\n.. code-block:: python\n   :linenos:\n\n   # myproject.scripts module\n\n   import optparse\n   import sys\n   import textwrap\n\n   from pyramid.paster import bootstrap\n\n   def settings_show():\n       description = \"\"\"\\\n       Print the deployment settings for a Pyramid application.  Example:\n       'show_settings deployment.ini'\n       \"\"\"\n       usage = \"usage: %prog config_uri\"\n       parser = optparse.OptionParser(\n           usage=usage,\n           description=textwrap.dedent(description)\n           )\n       parser.add_option(\n           '-o', '--omit',\n           dest='omit',\n           metavar='PREFIX',\n           type='string',\n           action='append',\n           help=(\"Omit settings which start with PREFIX (you can use this \"\n                 \"option multiple times)\")\n           )\n\n       options, args = parser.parse_args(sys.argv[1:])\n       if not len(args) >= 1:\n           print('You must provide at least one argument')\n           return 2\n       config_uri = args[0]\n       omit = options.omit\n       if omit is None:\n           omit = []\n       env = bootstrap(config_uri)\n       settings, closer = env['registry'].settings, env['closer']\n       try:\n           for k, v in settings.items():\n               if any([k.startswith(x) for x in omit]):\n                   continue\n               print('%-40s     %-20s' % (k, v))\n       finally:\n           closer()\n\nThis script uses the Python ``optparse`` module to allow us to make sense out\nof extra arguments passed to the script.  It uses the\n:func:`pyramid.paster.bootstrap` function to get information about the\napplication defined by a config file, and prints the deployment settings\ndefined in that config file.\n\nAfter adding this script to the package, you'll need to tell your\ndistribution's ``setup.py`` about its existence.  Within your distribution's\ntop-level directory your ``setup.py`` file will look something like this:\n\n.. code-block:: python\n   :linenos:\n\n   import os\n\n   from setuptools import setup, find_packages\n\n   here = os.path.abspath(os.path.dirname(__file__))\n   with open(os.path.join(here, 'README.txt')) as f:\n       README = f.read()\n   with open(os.path.join(here, 'CHANGES.txt')) as f:\n       CHANGES = f.read()\n\n   requires = ['pyramid', 'pyramid_debugtoolbar']\n\n   setup(name='MyProject',\n         version='0.0',\n         description='My project',\n         long_description=README + '\\n\\n' +  CHANGES,\n         classifiers=[\n           \"Programming Language :: Python\",\n           \"Framework :: Pylons\",\n           \"Topic :: Internet :: WWW/HTTP\",\n           \"Topic :: Internet :: WWW/HTTP :: WSGI :: Application\",\n           ],\n         author='',\n         author_email='',\n         url='',\n         keywords='web pyramid pylons',\n         packages=find_packages(),\n         include_package_data=True,\n         zip_safe=False,\n         install_requires=requires,\n         tests_require=requires,\n         test_suite=\"myproject\",\n         entry_points = \"\"\"\\\n         [paste.app_factory]\n         main = myproject:main\n         \"\"\",\n         )\n\nWe're going to change the setup.py file to add an ``[console_scripts]``\nsection with in the ``entry_points`` string.  Within this section, you should\nspecify a ``scriptname = dotted.path.to:yourfunction`` line.  For example::\n\n  [console_scripts]\n  show_settings = myproject.scripts:settings_show\n\nThe ``show_settings`` name will be the name of the script that is installed\ninto ``bin``.  The colon (``:``) between ``myproject.scripts`` and\n``settings_show`` above indicates that ``myproject.scripts`` is a Python\nmodule, and ``settings_show`` is the function in that module which contains\nthe code you'd like to run as the result of someone invoking the\n``show_settings`` script from their command line.\n\nThe result will be something like:\n\n.. code-block:: python\n   :linenos:\n\n   import os\n\n   from setuptools import setup, find_packages\n\n   here = os.path.abspath(os.path.dirname(__file__))\n   with open(os.path.join(here, 'README.txt')) as f:\n       README = f.read()\n   with open(os.path.join(here, 'CHANGES.txt')) as f:\n       CHANGES = f.read()\n\n   requires = ['pyramid', 'pyramid_debugtoolbar']\n\n   setup(name='MyProject',\n         version='0.0',\n         description='My project',\n         long_description=README + '\\n\\n' +  CHANGES,\n         classifiers=[\n           \"Programming Language :: Python\",\n           \"Framework :: Pylons\",\n           \"Topic :: Internet :: WWW/HTTP\",\n           \"Topic :: Internet :: WWW/HTTP :: WSGI :: Application\",\n           ],\n         author='',\n         author_email='',\n         url='',\n         keywords='web pyramid pylons',\n         packages=find_packages(),\n         include_package_data=True,\n         zip_safe=False,\n         install_requires=requires,\n         tests_require=requires,\n         test_suite=\"myproject\",\n         entry_points = \"\"\"\\\n         [paste.app_factory]\n         main = myproject:main\n         [console_scripts]\n         show_settings = myproject.scripts:settings_show\n         \"\"\",\n         )\n\nOnce you've done this, invoking ``$$VENV/bin/python setup.py\ndevelop`` will install a file named ``show_settings`` into the\n``$somevirtualenv/bin`` directory with a small bit of Python code that points\nto your entry point.  It will be executable.  Running it without any\narguments will print an error and exit.  Running it with a single argument\nthat is the path of a config file will print the settings.  Running it with\nan ``--omit=foo`` argument will omit the settings that have keys that start\nwith ``foo``.  Running it with two \"omit\" options (e.g. ``--omit=foo\n--omit=bar``) will omit all settings that have keys that start with either\n``foo`` or ``bar``::\n\n  $ $VENV/bin/show_settings development.ini --omit=pyramid --omit=debugtoolbar\n  debug_routematch                             False               \n  debug_templates                              True                \n  reload_templates                             True                \n  mako.directories                             []                  \n  debug_notfound                               False               \n  default_locale_name                          en                  \n  reload_resources                             False               \n  debug_authorization                          False               \n  reload_assets                                False               \n  prevent_http_cache                           False               \n\nPyramid's ``pserve``, ``pcreate``, ``pshell``, ``prequest``, ``ptweens`` and\nother ``p*`` scripts are implemented as console scripts.  When you invoke one\nof those, you are using a console script.\n",
            "header": {
                "file": {
                    "path": "docs/narr/commandline.rst"
                },
                "misc_line": null
            },
            "index_line": {
                "old_commit_hash": "89df13ce4",
                "new_commit_hash": "cb0c914d7",
                "mode": "100644"
            },
            "is_binary_file": false,
            "binary_line": null,
            "minus_file": {
                "path": "a/docs/narr/commandline.rst"
            },
            "plus_file": {
                "path": "b/docs/narr/commandline.rst"
            },
            "hunks": [
                {
                    "descriptor": {
                        "old_range": {
                            "start": 245,
                            "length": 7
                        },
                        "new_range": {
                            "start": 245,
                            "length": 7
                        },
                        "section": "exposed, and the request is configured to generate urls from the host"
                    },
                    "line_group": {
                        "all_lines": [
                            {
                                "content": ".. code-block:: text",
                                "type": "context"
                            },
                            {
                                "content": "",
                                "type": "context"
                            },
                            {
                                "content": "    $ $VENV/bin/pshell starter/development.ini",
                                "type": "context"
                            },
                            {
                                "content": "    Python 2.6.5 (r265:79063, Apr 29 2010, 00:31:32) ",
                                "type": "deleted"
                            },
                            {
                                "content": "    Python 2.6.5 (r265:79063, Apr 29 2010, 00:31:32)",
                                "type": "added"
                            },
                            {
                                "content": "    [GCC 4.4.3] on linux2",
                                "type": "context"
                            },
                            {
                                "content": "    Type \"help\" for more information.",
                                "type": "context"
                            },
                            {
                                "content": "",
                                "type": "context"
                            }
                        ]
                    },
                    "modified_entities": [],
                    "added_entities": [],
                    "deleted_entities": []
                },
                {
                    "descriptor": {
                        "old_range": {
                            "start": 278,
                            "length": 10
                        },
                        "new_range": {
                            "start": 278,
                            "length": 10
                        },
                        "section": "IPython or bpython"
                    },
                    "line_group": {
                        "all_lines": [
                            {
                                "content": "",
                                "type": "context"
                            },
                            {
                                "content": "If you have `IPython <http://en.wikipedia.org/wiki/IPython>`_ and/or",
                                "type": "context"
                            },
                            {
                                "content": "`bpython <http://bpython-interpreter.org/>`_ in",
                                "type": "context"
                            },
                            {
                                "content": "the interpreter you use to invoke the ``pshell`` command, ``pshell`` will ",
                                "type": "deleted"
                            },
                            {
                                "content": "the interpreter you use to invoke the ``pshell`` command, ``pshell`` will",
                                "type": "added"
                            },
                            {
                                "content": "autodiscover and use the first one found, in this order:",
                                "type": "context"
                            },
                            {
                                "content": "IPython, bpython, standard Python interpreter. However you could ",
                                "type": "deleted"
                            },
                            {
                                "content": "specifically invoke one of your choice with the ``-p choice`` or ",
                                "type": "deleted"
                            },
                            {
                                "content": "IPython, bpython, standard Python interpreter. However you could",
                                "type": "added"
                            },
                            {
                                "content": "specifically invoke one of your choice with the ``-p choice`` or",
                                "type": "added"
                            },
                            {
                                "content": "``--python-shell choice`` option.",
                                "type": "context"
                            },
                            {
                                "content": "",
                                "type": "context"
                            },
                            {
                                "content": ".. code-block:: text",
                                "type": "context"
                            }
                        ]
                    },
                    "modified_entities": [],
                    "added_entities": [],
                    "deleted_entities": []
                },
                {
                    "descriptor": {
                        "old_range": {
                            "start": 308,
                            "length": 20
                        },
                        "new_range": {
                            "start": 308,
                            "length": 16
                        },
                        "section": "and then your shell factory should return a function that accepts two arguments,"
                    },
                    "line_group": {
                        "all_lines": [
                            {
                                "content": ".. code-block:: python",
                                "type": "context"
                            },
                            {
                                "content": "",
                                "type": "context"
                            },
                            {
                                "content": "    def ptpython_shell_factory():",
                                "type": "context"
                            },
                            {
                                "content": "        try:",
                                "type": "deleted"
                            },
                            {
                                "content": "            from ptpython.repl import embed",
                                "type": "deleted"
                            },
                            {
                                "content": "            def PTPShell(banner, **kwargs):",
                                "type": "deleted"
                            },
                            {
                                "content": "                print(banner)",
                                "type": "deleted"
                            },
                            {
                                "content": "                return embed(**kwargs)",
                                "type": "deleted"
                            },
                            {
                                "content": "        except ImportError:",
                                "type": "deleted"
                            },
                            {
                                "content": "            return None",
                                "type": "deleted"
                            },
                            {
                                "content": "        from ptpython.repl import embed",
                                "type": "added"
                            },
                            {
                                "content": "        def PTPShell(banner, **kwargs):",
                                "type": "added"
                            },
                            {
                                "content": "            print(banner)",
                                "type": "added"
                            },
                            {
                                "content": "            return embed(**kwargs)",
                                "type": "added"
                            },
                            {
                                "content": "",
                                "type": "context"
                            },
                            {
                                "content": "        def shell(env, help):",
                                "type": "context"
                            },
                            {
                                "content": "            PTPShell(banner=help, locals=env)",
                                "type": "context"
                            },
                            {
                                "content": "",
                                "type": "context"
                            },
                            {
                                "content": "        return shell",
                                "type": "context"
                            },
                            {
                                "content": "",
                                "type": "context"
                            },
                            {
                                "content": "",
                                "type": "deleted"
                            },
                            {
                                "content": ".. index::",
                                "type": "context"
                            },
                            {
                                "content": "   pair: routes; printing",
                                "type": "context"
                            },
                            {
                                "content": "   single: proutes",
                                "type": "context"
                            }
                        ]
                    },
                    "modified_entities": [],
                    "added_entities": [],
                    "deleted_entities": []
                }
            ]
        },
        {
            "old_file_content": "from code import interact\nimport optparse\nimport os\nimport sys\nimport textwrap\nimport pkg_resources\n\nfrom pyramid.compat import configparser\nfrom pyramid.compat import exec_\nfrom pyramid.util import DottedNameResolver\nfrom pyramid.paster import bootstrap\n\nfrom pyramid.paster import setup_logging\n\nfrom pyramid.scripts.common import parse_vars\n\ndef main(argv=sys.argv, quiet=False):\n    command = PShellCommand(argv, quiet)\n    return command.run()\n\n\nclass PShellCommand(object):\n    usage = '%prog config_uri'\n    description = \"\"\"\\\n    Open an interactive shell with a Pyramid app loaded.  This command\n    accepts one positional argument named \"config_uri\" which specifies the\n    PasteDeploy config file to use for the interactive shell. The format is\n    \"inifile#name\". If the name is left off, the Pyramid default application\n    will be assumed.  Example: \"pshell myapp.ini#main\"\n\n    If you do not point the loader directly at the section of the ini file\n    containing your Pyramid application, the command will attempt to\n    find the app for you. If you are loading a pipeline that contains more\n    than one Pyramid application within it, the loader will use the\n    last one.\n    \"\"\"\n    bootstrap = (bootstrap,)  # for testing\n    pkg_resources = pkg_resources  # for testing\n\n    parser = optparse.OptionParser(\n        usage,\n        description=textwrap.dedent(description)\n        )\n    parser.add_option('-p', '--python-shell',\n                      action='store', type='string', dest='python_shell',\n                      default='', help='ipython | bpython | python')\n    parser.add_option('--setup',\n                      dest='setup',\n                      help=(\"A callable that will be passed the environment \"\n                            \"before it is made available to the shell. This \"\n                            \"option will override the 'setup' key in the \"\n                            \"[pshell] ini section.\"))\n\n    ConfigParser = configparser.ConfigParser # testing\n\n    loaded_objects = {}\n    object_help = {}\n    setup = None\n    pystartup = os.environ.get('PYTHONSTARTUP')\n\n    def __init__(self, argv, quiet=False):\n        self.quiet = quiet\n        self.options, self.args = self.parser.parse_args(argv[1:])\n\n    def pshell_file_config(self, filename):\n        config = self.ConfigParser()\n        config.read(filename)\n        try:\n            items = config.items('pshell')\n        except configparser.NoSectionError:\n            return\n\n        resolver = DottedNameResolver(None)\n        self.loaded_objects = {}\n        self.object_help = {}\n        self.setup = None\n        for k, v in items:\n            if k == 'setup':\n                self.setup = v\n            else:\n                self.loaded_objects[k] = resolver.maybe_resolve(v)\n                self.object_help[k] = v\n\n    def out(self, msg): # pragma: no cover\n        if not self.quiet:\n            print(msg)\n\n    def run(self, shell=None):\n        if not self.args:\n            self.out('Requires a config file argument')\n            return 2\n        config_uri = self.args[0]\n        config_file = config_uri.split('#', 1)[0]\n        setup_logging(config_file)\n        self.pshell_file_config(config_file)\n\n        # bootstrap the environ\n        env = self.bootstrap[0](config_uri, options=parse_vars(self.args[1:]))\n\n        # remove the closer from the env\n        closer = env.pop('closer')\n\n        # setup help text for default environment\n        env_help = dict(env)\n        env_help['app'] = 'The WSGI application.'\n        env_help['root'] = 'Root of the default resource tree.'\n        env_help['registry'] = 'Active Pyramid registry.'\n        env_help['request'] = 'Active request object.'\n        env_help['root_factory'] = (\n            'Default root factory used to create `root`.')\n\n        # override use_script with command-line options\n        if self.options.setup:\n            self.setup = self.options.setup\n\n        if self.setup:\n            # store the env before muddling it with the script\n            orig_env = env.copy()\n\n            # call the setup callable\n            resolver = DottedNameResolver(None)\n            setup = resolver.maybe_resolve(self.setup)\n            setup(env)\n\n            # remove any objects from default help that were overidden\n            for k, v in env.items():\n                if k not in orig_env or env[k] != orig_env[k]:\n                    env_help[k] = v\n\n        # load the pshell section of the ini file\n        env.update(self.loaded_objects)\n\n        # eliminate duplicates from env, allowing custom vars to override\n        for k in self.loaded_objects:\n            if k in env_help:\n                del env_help[k]\n\n        # generate help text\n        help = ''\n        if env_help:\n            help += 'Environment:'\n            for var in sorted(env_help.keys()):\n                help += '\\n  %-12s %s' % (var, env_help[var])\n\n        if self.object_help:\n            help += '\\n\\nCustom Variables:'\n            for var in sorted(self.object_help.keys()):\n                help += '\\n  %-12s %s' % (var, self.object_help[var])\n\n        if shell is None:\n            shell = self.make_shell()\n\n        if self.pystartup and os.path.isfile(self.pystartup):\n            with open(self.pystartup, 'rb') as fp:\n                exec_(fp.read().decode('utf-8'), env)\n            if '__builtins__' in env:\n                del env['__builtins__']\n\n        try:\n            shell(env, help)\n        finally:\n            closer()\n\n    def make_shell(self):\n        shells = {}\n\n        priority_order = ['ipython', 'bpython']\n\n        for ep in self.pkg_resources.iter_entry_points('pyramid.pshell'):\n            name = ep.name\n            shell_module = ep.load()\n            shells[name] = shell_module\n\n        sorted_shells = sorted(\n            shells.items(), key=lambda x: priority_order.index(x[0])\n        )\n\n        shell = None\n        user_shell = self.options.python_shell.lower()\n\n        if not user_shell:\n            for name, factory in sorted_shells:\n                shell = factory()\n\n                if shell is not None:\n                    break\n        else:\n            factory = shells.get(user_shell)\n\n            if factory is not None:\n                shell = factory()\n\n        if shell is None:\n            shell = self.make_default_shell()\n\n        return shell\n\n    def make_default_shell(self, interact=interact):\n        def shell(env, help):\n            cprt = 'Type \"help\" for more information.'\n            banner = \"Python %s on %s\\n%s\" % (sys.version, sys.platform, cprt)\n            banner += '\\n\\n' + help + '\\n'\n            interact(banner, local=env)\n        return shell\n\n    @classmethod\n    def make_bpython_shell(cls, BPShell=None):\n        if BPShell is None: # pragma: no cover\n            try:\n                from bpython import embed\n                BPShell = embed\n            except ImportError:\n                return None\n        def shell(env, help):\n            BPShell(locals_=env, banner=help + '\\n')\n        return shell\n\n    @classmethod\n    def make_ipython_shell(cls, IPShellFactory=None):\n        if IPShellFactory is None: # pragma: no cover\n            try:\n                from IPython.terminal.embed import (\n                    InteractiveShellEmbed)\n                IPShellFactory = InteractiveShellEmbed\n            except ImportError:\n                return None\n        def shell(env, help):\n            IPShell = IPShellFactory(banner2=help + '\\n', user_ns=env)\n            IPShell()\n        return shell\n\n\nif __name__ == '__main__': # pragma: no cover\n    sys.exit(main() or 0)\n",
            "new_file_content": "from code import interact\nimport optparse\nimport os\nimport sys\nimport textwrap\nimport pkg_resources\n\nfrom pyramid.compat import configparser\nfrom pyramid.compat import exec_\nfrom pyramid.util import DottedNameResolver\nfrom pyramid.paster import bootstrap\n\nfrom pyramid.paster import setup_logging\n\nfrom pyramid.scripts.common import parse_vars\n\ndef main(argv=sys.argv, quiet=False):\n    command = PShellCommand(argv, quiet)\n    return command.run()\n\n\nclass PShellCommand(object):\n    usage = '%prog config_uri'\n    description = \"\"\"\\\n    Open an interactive shell with a Pyramid app loaded.  This command\n    accepts one positional argument named \"config_uri\" which specifies the\n    PasteDeploy config file to use for the interactive shell. The format is\n    \"inifile#name\". If the name is left off, the Pyramid default application\n    will be assumed.  Example: \"pshell myapp.ini#main\"\n\n    If you do not point the loader directly at the section of the ini file\n    containing your Pyramid application, the command will attempt to\n    find the app for you. If you are loading a pipeline that contains more\n    than one Pyramid application within it, the loader will use the\n    last one.\n    \"\"\"\n    bootstrap = (bootstrap,)  # for testing\n    pkg_resources = pkg_resources  # for testing\n\n    parser = optparse.OptionParser(\n        usage,\n        description=textwrap.dedent(description)\n        )\n    parser.add_option('-p', '--python-shell',\n                      action='store', type='string', dest='python_shell',\n                      default='', help='ipython | bpython | python')\n    parser.add_option('--setup',\n                      dest='setup',\n                      help=(\"A callable that will be passed the environment \"\n                            \"before it is made available to the shell. This \"\n                            \"option will override the 'setup' key in the \"\n                            \"[pshell] ini section.\"))\n\n    ConfigParser = configparser.ConfigParser # testing\n\n    loaded_objects = {}\n    object_help = {}\n    setup = None\n    pystartup = os.environ.get('PYTHONSTARTUP')\n\n    def __init__(self, argv, quiet=False):\n        self.quiet = quiet\n        self.options, self.args = self.parser.parse_args(argv[1:])\n\n    def pshell_file_config(self, filename):\n        config = self.ConfigParser()\n        config.read(filename)\n        try:\n            items = config.items('pshell')\n        except configparser.NoSectionError:\n            return\n\n        resolver = DottedNameResolver(None)\n        self.loaded_objects = {}\n        self.object_help = {}\n        self.setup = None\n        for k, v in items:\n            if k == 'setup':\n                self.setup = v\n            else:\n                self.loaded_objects[k] = resolver.maybe_resolve(v)\n                self.object_help[k] = v\n\n    def out(self, msg): # pragma: no cover\n        if not self.quiet:\n            print(msg)\n\n    def run(self, shell=None):\n        if not self.args:\n            self.out('Requires a config file argument')\n            return 2\n        config_uri = self.args[0]\n        config_file = config_uri.split('#', 1)[0]\n        setup_logging(config_file)\n        self.pshell_file_config(config_file)\n\n        # bootstrap the environ\n        env = self.bootstrap[0](config_uri, options=parse_vars(self.args[1:]))\n\n        # remove the closer from the env\n        self.closer = env.pop('closer')\n\n        # setup help text for default environment\n        env_help = dict(env)\n        env_help['app'] = 'The WSGI application.'\n        env_help['root'] = 'Root of the default resource tree.'\n        env_help['registry'] = 'Active Pyramid registry.'\n        env_help['request'] = 'Active request object.'\n        env_help['root_factory'] = (\n            'Default root factory used to create `root`.')\n\n        # override use_script with command-line options\n        if self.options.setup:\n            self.setup = self.options.setup\n\n        if self.setup:\n            # store the env before muddling it with the script\n            orig_env = env.copy()\n\n            # call the setup callable\n            resolver = DottedNameResolver(None)\n            setup = resolver.maybe_resolve(self.setup)\n            setup(env)\n\n            # remove any objects from default help that were overidden\n            for k, v in env.items():\n                if k not in orig_env or env[k] != orig_env[k]:\n                    env_help[k] = v\n\n        # load the pshell section of the ini file\n        env.update(self.loaded_objects)\n\n        # eliminate duplicates from env, allowing custom vars to override\n        for k in self.loaded_objects:\n            if k in env_help:\n                del env_help[k]\n\n        # generate help text\n        help = ''\n        if env_help:\n            help += 'Environment:'\n            for var in sorted(env_help.keys()):\n                help += '\\n  %-12s %s' % (var, env_help[var])\n\n        if self.object_help:\n            help += '\\n\\nCustom Variables:'\n            for var in sorted(self.object_help.keys()):\n                help += '\\n  %-12s %s' % (var, self.object_help[var])\n\n        if shell is None:\n            try:\n                shell = self.make_shell()\n            except ValueError as e:\n                self.out(str(e))\n                self.closer()\n                return 1\n\n        if self.pystartup and os.path.isfile(self.pystartup):\n            with open(self.pystartup, 'rb') as fp:\n                exec_(fp.read().decode('utf-8'), env)\n            if '__builtins__' in env:\n                del env['__builtins__']\n\n        try:\n            shell(env, help)\n        finally:\n            self.closer()\n\n    def make_shell(self):\n        shells = {}\n\n        priority_order = ['ipython', 'bpython', 'python']\n\n        for ep in self.pkg_resources.iter_entry_points('pyramid.pshell'):\n            name = ep.name\n            shell_module = ep.load()\n            shells[name] = shell_module\n\n        sorted_shells = sorted(\n            shells.items(), key=lambda x: priority_order.index(x[0])\n        )\n\n        shell = None\n        user_shell = self.options.python_shell.lower()\n\n        if not user_shell:\n            for name, factory in sorted_shells:\n                shell = factory()\n\n                if shell is not None:\n                    break\n        else:\n            factory = shells.get(user_shell)\n\n            if factory is not None:\n                shell = factory()\n            else:\n                raise ValueError(\n                    'could not find a shell named \"%s\"' % user_shell\n                )\n\n        if shell is None:\n            shell = self.make_default_shell()\n\n        return shell\n\n    def make_default_shell(self, interact=interact):\n        def shell(env, help):\n            cprt = 'Type \"help\" for more information.'\n            banner = \"Python %s on %s\\n%s\" % (sys.version, sys.platform, cprt)\n            banner += '\\n\\n' + help + '\\n'\n            interact(banner, local=env)\n        return shell\n\n    @classmethod\n    def make_bpython_shell(cls, BPShell=None):\n        if BPShell is None: # pragma: no cover\n            try:\n                from bpython import embed\n                BPShell = embed\n            except ImportError:\n                return None\n        def shell(env, help):\n            BPShell(locals_=env, banner=help + '\\n')\n        return shell\n\n    @classmethod\n    def make_ipython_shell(cls, IPShellFactory=None):\n        if IPShellFactory is None: # pragma: no cover\n            try:\n                from IPython.terminal.embed import (\n                    InteractiveShellEmbed)\n                IPShellFactory = InteractiveShellEmbed\n            except ImportError:\n                return None\n        def shell(env, help):\n            IPShell = IPShellFactory(banner2=help + '\\n', user_ns=env)\n            IPShell()\n        return shell\n\n\nif __name__ == '__main__': # pragma: no cover\n    sys.exit(main() or 0)\n",
            "header": {
                "file": {
                    "path": "pyramid/scripts/pshell.py"
                },
                "misc_line": null
            },
            "index_line": {
                "old_commit_hash": "563418302",
                "new_commit_hash": "9c2573caa",
                "mode": "100644"
            },
            "is_binary_file": false,
            "binary_line": null,
            "minus_file": {
                "path": "a/pyramid/scripts/pshell.py"
            },
            "plus_file": {
                "path": "b/pyramid/scripts/pshell.py"
            },
            "hunks": [
                {
                    "descriptor": {
                        "old_range": {
                            "start": 98,
                            "length": 7
                        },
                        "new_range": {
                            "start": 98,
                            "length": 7
                        },
                        "section": "class PShellCommand(object):"
                    },
                    "line_group": {
                        "all_lines": [
                            {
                                "content": "        env = self.bootstrap[0](config_uri, options=parse_vars(self.args[1:]))",
                                "type": "context"
                            },
                            {
                                "content": "",
                                "type": "context"
                            },
                            {
                                "content": "        # remove the closer from the env",
                                "type": "context"
                            },
                            {
                                "content": "        closer = env.pop('closer')",
                                "type": "deleted"
                            },
                            {
                                "content": "        self.closer = env.pop('closer')",
                                "type": "added"
                            },
                            {
                                "content": "",
                                "type": "context"
                            },
                            {
                                "content": "        # setup help text for default environment",
                                "type": "context"
                            },
                            {
                                "content": "        env_help = dict(env)",
                                "type": "context"
                            }
                        ]
                    },
                    "modified_entities": [
                        {
                            "file_name": "pyramid/scripts/pshell.py",
                            "type": "method",
                            "name": "PShellCommand.run",
                            "content": "class PShellCommand(object):\n    usage = '%prog config_uri'\n    description = \"\"\"\\\n    Open an interactive shell with a Pyramid app loaded.  This command\n    accepts one positional argument named \"config_uri\" which specifies the\n    PasteDeploy config file to use for the interactive shell. The format is\n    \"inifile#name\". If the name is left off, the Pyramid default application\n    will be assumed.  Example: \"pshell myapp.ini#main\"\n\n    If you do not point the loader directly at the section of the ini file\n    containing your Pyramid application, the command will attempt to\n    find the app for you. If you are loading a pipeline that contains more\n    than one Pyramid application within it, the loader will use the\n    last one.\n    \"\"\"\n    bootstrap = (bootstrap,)  # for testing\n    pkg_resources = pkg_resources  # for testing\n\n    parser = optparse.OptionParser(\n        usage,\n        description=textwrap.dedent(description)\n        )\n    parser.add_option('-p', '--python-shell',\n                      action='store', type='string', dest='python_shell',\n                      default='', help='ipython | bpython | python')\n    parser.add_option('--setup',\n                      dest='setup',\n                      help=(\"A callable that will be passed the environment \"\n                            \"before it is made available to the shell. This \"\n                            \"option will override the 'setup' key in the \"\n                            \"[pshell] ini section.\"))\n\n    ConfigParser = configparser.ConfigParser # testing\n\n    loaded_objects = {}\n    object_help = {}\n    setup = None\n    pystartup = os.environ.get('PYTHONSTARTUP')\n\n    def __init__(self, argv, quiet=False):\n        self.quiet = quiet\n        self.options, self.args = self.parser.parse_args(argv[1:])\n\n    def pshell_file_config(self, filename):\n        config = self.ConfigParser()\n        config.read(filename)\n        try:\n            items = config.items('pshell')\n        except configparser.NoSectionError:\n            return\n\n        resolver = DottedNameResolver(None)\n        self.loaded_objects = {}\n        self.object_help = {}\n        self.setup = None\n        for k, v in items:\n            if k == 'setup':\n                self.setup = v\n            else:\n                self.loaded_objects[k] = resolver.maybe_resolve(v)\n                self.object_help[k] = v\n\n    def out(self, msg): # pragma: no cover\n        if not self.quiet:\n            print(msg)\n\n    def run(self, shell=None):\n        if not self.args:\n            self.out('Requires a config file argument')\n            return 2\n        config_uri = self.args[0]\n        config_file = config_uri.split('#', 1)[0]\n        setup_logging(config_file)\n        self.pshell_file_config(config_file)\n\n        # bootstrap the environ\n        env = self.bootstrap[0](config_uri, options=parse_vars(self.args[1:]))\n\n        # remove the closer from the env\n        closer = env.pop('closer')\n\n        # setup help text for default environment\n        env_help = dict(env)\n        env_help['app'] = 'The WSGI application.'\n        env_help['root'] = 'Root of the default resource tree.'\n        env_help['registry'] = 'Active Pyramid registry.'\n        env_help['request'] = 'Active request object.'\n        env_help['root_factory'] = (\n            'Default root factory used to create `root`.')\n\n        # override use_script with command-line options\n        if self.options.setup:\n            self.setup = self.options.setup\n\n        if self.setup:\n            # store the env before muddling it with the script\n            orig_env = env.copy()\n\n            # call the setup callable\n            resolver = DottedNameResolver(None)\n            setup = resolver.maybe_resolve(self.setup)\n            setup(env)\n\n            # remove any objects from default help that were overidden\n            for k, v in env.items():\n                if k not in orig_env or env[k] != orig_env[k]:\n                    env_help[k] = v\n\n        # load the pshell section of the ini file\n        env.update(self.loaded_objects)\n\n        # eliminate duplicates from env, allowing custom vars to override\n        for k in self.loaded_objects:\n            if k in env_help:\n                del env_help[k]\n\n        # generate help text\n        help = ''\n        if env_help:\n            help += 'Environment:'\n            for var in sorted(env_help.keys()):\n                help += '\\n  %-12s %s' % (var, env_help[var])\n\n        if self.object_help:\n            help += '\\n\\nCustom Variables:'\n            for var in sorted(self.object_help.keys()):\n                help += '\\n  %-12s %s' % (var, self.object_help[var])\n\n        if shell is None:\n            shell = self.make_shell()\n\n        if self.pystartup and os.path.isfile(self.pystartup):\n            with open(self.pystartup, 'rb') as fp:\n                exec_(fp.read().decode('utf-8'), env)\n            if '__builtins__' in env:\n                del env['__builtins__']\n\n        try:\n            shell(env, help)\n        finally:\n            closer()\n\n    def make_shell(self):\n        shells = {}\n\n        priority_order = ['ipython', 'bpython']\n\n        for ep in self.pkg_resources.iter_entry_points('pyramid.pshell'):\n            name = ep.name\n            shell_module = ep.load()\n            shells[name] = shell_module\n\n        sorted_shells = sorted(\n            shells.items(), key=lambda x: priority_order.index(x[0])\n        )\n\n        shell = None\n        user_shell = self.options.python_shell.lower()\n\n        if not user_shell:\n            for name, factory in sorted_shells:\n                shell = factory()\n\n                if shell is not None:\n                    break\n        else:\n            factory = shells.get(user_shell)\n\n            if factory is not None:\n                shell = factory()\n\n        if shell is None:\n            shell = self.make_default_shell()\n\n        return shell\n\n    def make_default_shell(self, interact=interact):\n        def shell(env, help):\n            cprt = 'Type \"help\" for more information.'\n            banner = \"Python %s on %s\\n%s\" % (sys.version, sys.platform, cprt)\n            banner += '\\n\\n' + help + '\\n'\n            interact(banner, local=env)\n        return shell\n\n    @classmethod\n    def make_bpython_shell(cls, BPShell=None):\n        if BPShell is None: # pragma: no cover\n            try:\n                from bpython import embed\n                BPShell = embed\n            except ImportError:\n                return None\n        def shell(env, help):\n            BPShell(locals_=env, banner=help + '\\n')\n        return shell\n\n    @classmethod\n    def make_ipython_shell(cls, IPShellFactory=None):\n        if IPShellFactory is None: # pragma: no cover\n            try:\n                from IPython.terminal.embed import (\n                    InteractiveShellEmbed)\n                IPShellFactory = InteractiveShellEmbed\n            except ImportError:\n                return None\n        def shell(env, help):\n            IPShell = IPShellFactory(banner2=help + '\\n', user_ns=env)\n            IPShell()\n        return shell",
                            "ast_type_str": "ClassDef",
                            "start_lineno": 88,
                            "end_lineno": 162,
                            "parent": {
                                "file_name": "pyramid/scripts/pshell.py",
                                "type": "class",
                                "name": "PShellCommand",
                                "content": "class PShellCommand(object):\n    usage = '%prog config_uri'\n    description = \"\"\"\\\n    Open an interactive shell with a Pyramid app loaded.  This command\n    accepts one positional argument named \"config_uri\" which specifies the\n    PasteDeploy config file to use for the interactive shell. The format is\n    \"inifile#name\". If the name is left off, the Pyramid default application\n    will be assumed.  Example: \"pshell myapp.ini#main\"\n\n    If you do not point the loader directly at the section of the ini file\n    containing your Pyramid application, the command will attempt to\n    find the app for you. If you are loading a pipeline that contains more\n    than one Pyramid application within it, the loader will use the\n    last one.\n    \"\"\"\n    bootstrap = (bootstrap,)  # for testing\n    pkg_resources = pkg_resources  # for testing\n\n    parser = optparse.OptionParser(\n        usage,\n        description=textwrap.dedent(description)\n        )\n    parser.add_option('-p', '--python-shell',\n                      action='store', type='string', dest='python_shell',\n                      default='', help='ipython | bpython | python')\n    parser.add_option('--setup',\n                      dest='setup',\n                      help=(\"A callable that will be passed the environment \"\n                            \"before it is made available to the shell. This \"\n                            \"option will override the 'setup' key in the \"\n                            \"[pshell] ini section.\"))\n\n    ConfigParser = configparser.ConfigParser # testing\n\n    loaded_objects = {}\n    object_help = {}\n    setup = None\n    pystartup = os.environ.get('PYTHONSTARTUP')\n\n    def __init__(self, argv, quiet=False):\n        self.quiet = quiet\n        self.options, self.args = self.parser.parse_args(argv[1:])\n\n    def pshell_file_config(self, filename):\n        config = self.ConfigParser()\n        config.read(filename)\n        try:\n            items = config.items('pshell')\n        except configparser.NoSectionError:\n            return\n\n        resolver = DottedNameResolver(None)\n        self.loaded_objects = {}\n        self.object_help = {}\n        self.setup = None\n        for k, v in items:\n            if k == 'setup':\n                self.setup = v\n            else:\n                self.loaded_objects[k] = resolver.maybe_resolve(v)\n                self.object_help[k] = v\n\n    def out(self, msg): # pragma: no cover\n        if not self.quiet:\n            print(msg)\n\n    def run(self, shell=None):\n        if not self.args:\n            self.out('Requires a config file argument')\n            return 2\n        config_uri = self.args[0]\n        config_file = config_uri.split('#', 1)[0]\n        setup_logging(config_file)\n        self.pshell_file_config(config_file)\n\n        # bootstrap the environ\n        env = self.bootstrap[0](config_uri, options=parse_vars(self.args[1:]))\n\n        # remove the closer from the env\n        closer = env.pop('closer')\n\n        # setup help text for default environment\n        env_help = dict(env)\n        env_help['app'] = 'The WSGI application.'\n        env_help['root'] = 'Root of the default resource tree.'\n        env_help['registry'] = 'Active Pyramid registry.'\n        env_help['request'] = 'Active request object.'\n        env_help['root_factory'] = (\n            'Default root factory used to create `root`.')\n\n        # override use_script with command-line options\n        if self.options.setup:\n            self.setup = self.options.setup\n\n        if self.setup:\n            # store the env before muddling it with the script\n            orig_env = env.copy()\n\n            # call the setup callable\n            resolver = DottedNameResolver(None)\n            setup = resolver.maybe_resolve(self.setup)\n            setup(env)\n\n            # remove any objects from default help that were overidden\n            for k, v in env.items():\n                if k not in orig_env or env[k] != orig_env[k]:\n                    env_help[k] = v\n\n        # load the pshell section of the ini file\n        env.update(self.loaded_objects)\n\n        # eliminate duplicates from env, allowing custom vars to override\n        for k in self.loaded_objects:\n            if k in env_help:\n                del env_help[k]\n\n        # generate help text\n        help = ''\n        if env_help:\n            help += 'Environment:'\n            for var in sorted(env_help.keys()):\n                help += '\\n  %-12s %s' % (var, env_help[var])\n\n        if self.object_help:\n            help += '\\n\\nCustom Variables:'\n            for var in sorted(self.object_help.keys()):\n                help += '\\n  %-12s %s' % (var, self.object_help[var])\n\n        if shell is None:\n            shell = self.make_shell()\n\n        if self.pystartup and os.path.isfile(self.pystartup):\n            with open(self.pystartup, 'rb') as fp:\n                exec_(fp.read().decode('utf-8'), env)\n            if '__builtins__' in env:\n                del env['__builtins__']\n\n        try:\n            shell(env, help)\n        finally:\n            closer()\n\n    def make_shell(self):\n        shells = {}\n\n        priority_order = ['ipython', 'bpython']\n\n        for ep in self.pkg_resources.iter_entry_points('pyramid.pshell'):\n            name = ep.name\n            shell_module = ep.load()\n            shells[name] = shell_module\n\n        sorted_shells = sorted(\n            shells.items(), key=lambda x: priority_order.index(x[0])\n        )\n\n        shell = None\n        user_shell = self.options.python_shell.lower()\n\n        if not user_shell:\n            for name, factory in sorted_shells:\n                shell = factory()\n\n                if shell is not None:\n                    break\n        else:\n            factory = shells.get(user_shell)\n\n            if factory is not None:\n                shell = factory()\n\n        if shell is None:\n            shell = self.make_default_shell()\n\n        return shell\n\n    def make_default_shell(self, interact=interact):\n        def shell(env, help):\n            cprt = 'Type \"help\" for more information.'\n            banner = \"Python %s on %s\\n%s\" % (sys.version, sys.platform, cprt)\n            banner += '\\n\\n' + help + '\\n'\n            interact(banner, local=env)\n        return shell\n\n    @classmethod\n    def make_bpython_shell(cls, BPShell=None):\n        if BPShell is None: # pragma: no cover\n            try:\n                from bpython import embed\n                BPShell = embed\n            except ImportError:\n                return None\n        def shell(env, help):\n            BPShell(locals_=env, banner=help + '\\n')\n        return shell\n\n    @classmethod\n    def make_ipython_shell(cls, IPShellFactory=None):\n        if IPShellFactory is None: # pragma: no cover\n            try:\n                from IPython.terminal.embed import (\n                    InteractiveShellEmbed)\n                IPShellFactory = InteractiveShellEmbed\n            except ImportError:\n                return None\n        def shell(env, help):\n            IPShell = IPShellFactory(banner2=help + '\\n', user_ns=env)\n            IPShell()\n        return shell",
                                "ast_type_str": "ClassDef",
                                "start_lineno": 22,
                                "end_lineno": 230,
                                "parent": null
                            }
                        },
                        {
                            "file_name": "pyramid/scripts/pshell.py",
                            "type": "class",
                            "name": "PShellCommand",
                            "content": "class PShellCommand(object):\n    usage = '%prog config_uri'\n    description = \"\"\"\\\n    Open an interactive shell with a Pyramid app loaded.  This command\n    accepts one positional argument named \"config_uri\" which specifies the\n    PasteDeploy config file to use for the interactive shell. The format is\n    \"inifile#name\". If the name is left off, the Pyramid default application\n    will be assumed.  Example: \"pshell myapp.ini#main\"\n\n    If you do not point the loader directly at the section of the ini file\n    containing your Pyramid application, the command will attempt to\n    find the app for you. If you are loading a pipeline that contains more\n    than one Pyramid application within it, the loader will use the\n    last one.\n    \"\"\"\n    bootstrap = (bootstrap,)  # for testing\n    pkg_resources = pkg_resources  # for testing\n\n    parser = optparse.OptionParser(\n        usage,\n        description=textwrap.dedent(description)\n        )\n    parser.add_option('-p', '--python-shell',\n                      action='store', type='string', dest='python_shell',\n                      default='', help='ipython | bpython | python')\n    parser.add_option('--setup',\n                      dest='setup',\n                      help=(\"A callable that will be passed the environment \"\n                            \"before it is made available to the shell. This \"\n                            \"option will override the 'setup' key in the \"\n                            \"[pshell] ini section.\"))\n\n    ConfigParser = configparser.ConfigParser # testing\n\n    loaded_objects = {}\n    object_help = {}\n    setup = None\n    pystartup = os.environ.get('PYTHONSTARTUP')\n\n    def __init__(self, argv, quiet=False):\n        self.quiet = quiet\n        self.options, self.args = self.parser.parse_args(argv[1:])\n\n    def pshell_file_config(self, filename):\n        config = self.ConfigParser()\n        config.read(filename)\n        try:\n            items = config.items('pshell')\n        except configparser.NoSectionError:\n            return\n\n        resolver = DottedNameResolver(None)\n        self.loaded_objects = {}\n        self.object_help = {}\n        self.setup = None\n        for k, v in items:\n            if k == 'setup':\n                self.setup = v\n            else:\n                self.loaded_objects[k] = resolver.maybe_resolve(v)\n                self.object_help[k] = v\n\n    def out(self, msg): # pragma: no cover\n        if not self.quiet:\n            print(msg)\n\n    def run(self, shell=None):\n        if not self.args:\n            self.out('Requires a config file argument')\n            return 2\n        config_uri = self.args[0]\n        config_file = config_uri.split('#', 1)[0]\n        setup_logging(config_file)\n        self.pshell_file_config(config_file)\n\n        # bootstrap the environ\n        env = self.bootstrap[0](config_uri, options=parse_vars(self.args[1:]))\n\n        # remove the closer from the env\n        closer = env.pop('closer')\n\n        # setup help text for default environment\n        env_help = dict(env)\n        env_help['app'] = 'The WSGI application.'\n        env_help['root'] = 'Root of the default resource tree.'\n        env_help['registry'] = 'Active Pyramid registry.'\n        env_help['request'] = 'Active request object.'\n        env_help['root_factory'] = (\n            'Default root factory used to create `root`.')\n\n        # override use_script with command-line options\n        if self.options.setup:\n            self.setup = self.options.setup\n\n        if self.setup:\n            # store the env before muddling it with the script\n            orig_env = env.copy()\n\n            # call the setup callable\n            resolver = DottedNameResolver(None)\n            setup = resolver.maybe_resolve(self.setup)\n            setup(env)\n\n            # remove any objects from default help that were overidden\n            for k, v in env.items():\n                if k not in orig_env or env[k] != orig_env[k]:\n                    env_help[k] = v\n\n        # load the pshell section of the ini file\n        env.update(self.loaded_objects)\n\n        # eliminate duplicates from env, allowing custom vars to override\n        for k in self.loaded_objects:\n            if k in env_help:\n                del env_help[k]\n\n        # generate help text\n        help = ''\n        if env_help:\n            help += 'Environment:'\n            for var in sorted(env_help.keys()):\n                help += '\\n  %-12s %s' % (var, env_help[var])\n\n        if self.object_help:\n            help += '\\n\\nCustom Variables:'\n            for var in sorted(self.object_help.keys()):\n                help += '\\n  %-12s %s' % (var, self.object_help[var])\n\n        if shell is None:\n            shell = self.make_shell()\n\n        if self.pystartup and os.path.isfile(self.pystartup):\n            with open(self.pystartup, 'rb') as fp:\n                exec_(fp.read().decode('utf-8'), env)\n            if '__builtins__' in env:\n                del env['__builtins__']\n\n        try:\n            shell(env, help)\n        finally:\n            closer()\n\n    def make_shell(self):\n        shells = {}\n\n        priority_order = ['ipython', 'bpython']\n\n        for ep in self.pkg_resources.iter_entry_points('pyramid.pshell'):\n            name = ep.name\n            shell_module = ep.load()\n            shells[name] = shell_module\n\n        sorted_shells = sorted(\n            shells.items(), key=lambda x: priority_order.index(x[0])\n        )\n\n        shell = None\n        user_shell = self.options.python_shell.lower()\n\n        if not user_shell:\n            for name, factory in sorted_shells:\n                shell = factory()\n\n                if shell is not None:\n                    break\n        else:\n            factory = shells.get(user_shell)\n\n            if factory is not None:\n                shell = factory()\n\n        if shell is None:\n            shell = self.make_default_shell()\n\n        return shell\n\n    def make_default_shell(self, interact=interact):\n        def shell(env, help):\n            cprt = 'Type \"help\" for more information.'\n            banner = \"Python %s on %s\\n%s\" % (sys.version, sys.platform, cprt)\n            banner += '\\n\\n' + help + '\\n'\n            interact(banner, local=env)\n        return shell\n\n    @classmethod\n    def make_bpython_shell(cls, BPShell=None):\n        if BPShell is None: # pragma: no cover\n            try:\n                from bpython import embed\n                BPShell = embed\n            except ImportError:\n                return None\n        def shell(env, help):\n            BPShell(locals_=env, banner=help + '\\n')\n        return shell\n\n    @classmethod\n    def make_ipython_shell(cls, IPShellFactory=None):\n        if IPShellFactory is None: # pragma: no cover\n            try:\n                from IPython.terminal.embed import (\n                    InteractiveShellEmbed)\n                IPShellFactory = InteractiveShellEmbed\n            except ImportError:\n                return None\n        def shell(env, help):\n            IPShell = IPShellFactory(banner2=help + '\\n', user_ns=env)\n            IPShell()\n        return shell",
                            "ast_type_str": "ClassDef",
                            "start_lineno": 22,
                            "end_lineno": 230,
                            "parent": null
                        }
                    ],
                    "added_entities": [],
                    "deleted_entities": []
                },
                {
                    "descriptor": {
                        "old_range": {
                            "start": 148,
                            "length": 7
                        },
                        "new_range": {
                            "start": 148,
                            "length": 12
                        },
                        "section": "class PShellCommand(object):"
                    },
                    "line_group": {
                        "all_lines": [
                            {
                                "content": "                help += '\\n  %-12s %s' % (var, self.object_help[var])",
                                "type": "context"
                            },
                            {
                                "content": "",
                                "type": "context"
                            },
                            {
                                "content": "        if shell is None:",
                                "type": "context"
                            },
                            {
                                "content": "            shell = self.make_shell()",
                                "type": "deleted"
                            },
                            {
                                "content": "            try:",
                                "type": "added"
                            },
                            {
                                "content": "                shell = self.make_shell()",
                                "type": "added"
                            },
                            {
                                "content": "            except ValueError as e:",
                                "type": "added"
                            },
                            {
                                "content": "                self.out(str(e))",
                                "type": "added"
                            },
                            {
                                "content": "                self.closer()",
                                "type": "added"
                            },
                            {
                                "content": "                return 1",
                                "type": "added"
                            },
                            {
                                "content": "",
                                "type": "context"
                            },
                            {
                                "content": "        if self.pystartup and os.path.isfile(self.pystartup):",
                                "type": "context"
                            },
                            {
                                "content": "            with open(self.pystartup, 'rb') as fp:",
                                "type": "context"
                            }
                        ]
                    },
                    "modified_entities": [
                        {
                            "file_name": "pyramid/scripts/pshell.py",
                            "type": "method",
                            "name": "PShellCommand.run",
                            "content": "class PShellCommand(object):\n    usage = '%prog config_uri'\n    description = \"\"\"\\\n    Open an interactive shell with a Pyramid app loaded.  This command\n    accepts one positional argument named \"config_uri\" which specifies the\n    PasteDeploy config file to use for the interactive shell. The format is\n    \"inifile#name\". If the name is left off, the Pyramid default application\n    will be assumed.  Example: \"pshell myapp.ini#main\"\n\n    If you do not point the loader directly at the section of the ini file\n    containing your Pyramid application, the command will attempt to\n    find the app for you. If you are loading a pipeline that contains more\n    than one Pyramid application within it, the loader will use the\n    last one.\n    \"\"\"\n    bootstrap = (bootstrap,)  # for testing\n    pkg_resources = pkg_resources  # for testing\n\n    parser = optparse.OptionParser(\n        usage,\n        description=textwrap.dedent(description)\n        )\n    parser.add_option('-p', '--python-shell',\n                      action='store', type='string', dest='python_shell',\n                      default='', help='ipython | bpython | python')\n    parser.add_option('--setup',\n                      dest='setup',\n                      help=(\"A callable that will be passed the environment \"\n                            \"before it is made available to the shell. This \"\n                            \"option will override the 'setup' key in the \"\n                            \"[pshell] ini section.\"))\n\n    ConfigParser = configparser.ConfigParser # testing\n\n    loaded_objects = {}\n    object_help = {}\n    setup = None\n    pystartup = os.environ.get('PYTHONSTARTUP')\n\n    def __init__(self, argv, quiet=False):\n        self.quiet = quiet\n        self.options, self.args = self.parser.parse_args(argv[1:])\n\n    def pshell_file_config(self, filename):\n        config = self.ConfigParser()\n        config.read(filename)\n        try:\n            items = config.items('pshell')\n        except configparser.NoSectionError:\n            return\n\n        resolver = DottedNameResolver(None)\n        self.loaded_objects = {}\n        self.object_help = {}\n        self.setup = None\n        for k, v in items:\n            if k == 'setup':\n                self.setup = v\n            else:\n                self.loaded_objects[k] = resolver.maybe_resolve(v)\n                self.object_help[k] = v\n\n    def out(self, msg): # pragma: no cover\n        if not self.quiet:\n            print(msg)\n\n    def run(self, shell=None):\n        if not self.args:\n            self.out('Requires a config file argument')\n            return 2\n        config_uri = self.args[0]\n        config_file = config_uri.split('#', 1)[0]\n        setup_logging(config_file)\n        self.pshell_file_config(config_file)\n\n        # bootstrap the environ\n        env = self.bootstrap[0](config_uri, options=parse_vars(self.args[1:]))\n\n        # remove the closer from the env\n        closer = env.pop('closer')\n\n        # setup help text for default environment\n        env_help = dict(env)\n        env_help['app'] = 'The WSGI application.'\n        env_help['root'] = 'Root of the default resource tree.'\n        env_help['registry'] = 'Active Pyramid registry.'\n        env_help['request'] = 'Active request object.'\n        env_help['root_factory'] = (\n            'Default root factory used to create `root`.')\n\n        # override use_script with command-line options\n        if self.options.setup:\n            self.setup = self.options.setup\n\n        if self.setup:\n            # store the env before muddling it with the script\n            orig_env = env.copy()\n\n            # call the setup callable\n            resolver = DottedNameResolver(None)\n            setup = resolver.maybe_resolve(self.setup)\n            setup(env)\n\n            # remove any objects from default help that were overidden\n            for k, v in env.items():\n                if k not in orig_env or env[k] != orig_env[k]:\n                    env_help[k] = v\n\n        # load the pshell section of the ini file\n        env.update(self.loaded_objects)\n\n        # eliminate duplicates from env, allowing custom vars to override\n        for k in self.loaded_objects:\n            if k in env_help:\n                del env_help[k]\n\n        # generate help text\n        help = ''\n        if env_help:\n            help += 'Environment:'\n            for var in sorted(env_help.keys()):\n                help += '\\n  %-12s %s' % (var, env_help[var])\n\n        if self.object_help:\n            help += '\\n\\nCustom Variables:'\n            for var in sorted(self.object_help.keys()):\n                help += '\\n  %-12s %s' % (var, self.object_help[var])\n\n        if shell is None:\n            shell = self.make_shell()\n\n        if self.pystartup and os.path.isfile(self.pystartup):\n            with open(self.pystartup, 'rb') as fp:\n                exec_(fp.read().decode('utf-8'), env)\n            if '__builtins__' in env:\n                del env['__builtins__']\n\n        try:\n            shell(env, help)\n        finally:\n            closer()\n\n    def make_shell(self):\n        shells = {}\n\n        priority_order = ['ipython', 'bpython']\n\n        for ep in self.pkg_resources.iter_entry_points('pyramid.pshell'):\n            name = ep.name\n            shell_module = ep.load()\n            shells[name] = shell_module\n\n        sorted_shells = sorted(\n            shells.items(), key=lambda x: priority_order.index(x[0])\n        )\n\n        shell = None\n        user_shell = self.options.python_shell.lower()\n\n        if not user_shell:\n            for name, factory in sorted_shells:\n                shell = factory()\n\n                if shell is not None:\n                    break\n        else:\n            factory = shells.get(user_shell)\n\n            if factory is not None:\n                shell = factory()\n\n        if shell is None:\n            shell = self.make_default_shell()\n\n        return shell\n\n    def make_default_shell(self, interact=interact):\n        def shell(env, help):\n            cprt = 'Type \"help\" for more information.'\n            banner = \"Python %s on %s\\n%s\" % (sys.version, sys.platform, cprt)\n            banner += '\\n\\n' + help + '\\n'\n            interact(banner, local=env)\n        return shell\n\n    @classmethod\n    def make_bpython_shell(cls, BPShell=None):\n        if BPShell is None: # pragma: no cover\n            try:\n                from bpython import embed\n                BPShell = embed\n            except ImportError:\n                return None\n        def shell(env, help):\n            BPShell(locals_=env, banner=help + '\\n')\n        return shell\n\n    @classmethod\n    def make_ipython_shell(cls, IPShellFactory=None):\n        if IPShellFactory is None: # pragma: no cover\n            try:\n                from IPython.terminal.embed import (\n                    InteractiveShellEmbed)\n                IPShellFactory = InteractiveShellEmbed\n            except ImportError:\n                return None\n        def shell(env, help):\n            IPShell = IPShellFactory(banner2=help + '\\n', user_ns=env)\n            IPShell()\n        return shell",
                            "ast_type_str": "ClassDef",
                            "start_lineno": 88,
                            "end_lineno": 162,
                            "parent": {
                                "file_name": "pyramid/scripts/pshell.py",
                                "type": "class",
                                "name": "PShellCommand",
                                "content": "class PShellCommand(object):\n    usage = '%prog config_uri'\n    description = \"\"\"\\\n    Open an interactive shell with a Pyramid app loaded.  This command\n    accepts one positional argument named \"config_uri\" which specifies the\n    PasteDeploy config file to use for the interactive shell. The format is\n    \"inifile#name\". If the name is left off, the Pyramid default application\n    will be assumed.  Example: \"pshell myapp.ini#main\"\n\n    If you do not point the loader directly at the section of the ini file\n    containing your Pyramid application, the command will attempt to\n    find the app for you. If you are loading a pipeline that contains more\n    than one Pyramid application within it, the loader will use the\n    last one.\n    \"\"\"\n    bootstrap = (bootstrap,)  # for testing\n    pkg_resources = pkg_resources  # for testing\n\n    parser = optparse.OptionParser(\n        usage,\n        description=textwrap.dedent(description)\n        )\n    parser.add_option('-p', '--python-shell',\n                      action='store', type='string', dest='python_shell',\n                      default='', help='ipython | bpython | python')\n    parser.add_option('--setup',\n                      dest='setup',\n                      help=(\"A callable that will be passed the environment \"\n                            \"before it is made available to the shell. This \"\n                            \"option will override the 'setup' key in the \"\n                            \"[pshell] ini section.\"))\n\n    ConfigParser = configparser.ConfigParser # testing\n\n    loaded_objects = {}\n    object_help = {}\n    setup = None\n    pystartup = os.environ.get('PYTHONSTARTUP')\n\n    def __init__(self, argv, quiet=False):\n        self.quiet = quiet\n        self.options, self.args = self.parser.parse_args(argv[1:])\n\n    def pshell_file_config(self, filename):\n        config = self.ConfigParser()\n        config.read(filename)\n        try:\n            items = config.items('pshell')\n        except configparser.NoSectionError:\n            return\n\n        resolver = DottedNameResolver(None)\n        self.loaded_objects = {}\n        self.object_help = {}\n        self.setup = None\n        for k, v in items:\n            if k == 'setup':\n                self.setup = v\n            else:\n                self.loaded_objects[k] = resolver.maybe_resolve(v)\n                self.object_help[k] = v\n\n    def out(self, msg): # pragma: no cover\n        if not self.quiet:\n            print(msg)\n\n    def run(self, shell=None):\n        if not self.args:\n            self.out('Requires a config file argument')\n            return 2\n        config_uri = self.args[0]\n        config_file = config_uri.split('#', 1)[0]\n        setup_logging(config_file)\n        self.pshell_file_config(config_file)\n\n        # bootstrap the environ\n        env = self.bootstrap[0](config_uri, options=parse_vars(self.args[1:]))\n\n        # remove the closer from the env\n        closer = env.pop('closer')\n\n        # setup help text for default environment\n        env_help = dict(env)\n        env_help['app'] = 'The WSGI application.'\n        env_help['root'] = 'Root of the default resource tree.'\n        env_help['registry'] = 'Active Pyramid registry.'\n        env_help['request'] = 'Active request object.'\n        env_help['root_factory'] = (\n            'Default root factory used to create `root`.')\n\n        # override use_script with command-line options\n        if self.options.setup:\n            self.setup = self.options.setup\n\n        if self.setup:\n            # store the env before muddling it with the script\n            orig_env = env.copy()\n\n            # call the setup callable\n            resolver = DottedNameResolver(None)\n            setup = resolver.maybe_resolve(self.setup)\n            setup(env)\n\n            # remove any objects from default help that were overidden\n            for k, v in env.items():\n                if k not in orig_env or env[k] != orig_env[k]:\n                    env_help[k] = v\n\n        # load the pshell section of the ini file\n        env.update(self.loaded_objects)\n\n        # eliminate duplicates from env, allowing custom vars to override\n        for k in self.loaded_objects:\n            if k in env_help:\n                del env_help[k]\n\n        # generate help text\n        help = ''\n        if env_help:\n            help += 'Environment:'\n            for var in sorted(env_help.keys()):\n                help += '\\n  %-12s %s' % (var, env_help[var])\n\n        if self.object_help:\n            help += '\\n\\nCustom Variables:'\n            for var in sorted(self.object_help.keys()):\n                help += '\\n  %-12s %s' % (var, self.object_help[var])\n\n        if shell is None:\n            shell = self.make_shell()\n\n        if self.pystartup and os.path.isfile(self.pystartup):\n            with open(self.pystartup, 'rb') as fp:\n                exec_(fp.read().decode('utf-8'), env)\n            if '__builtins__' in env:\n                del env['__builtins__']\n\n        try:\n            shell(env, help)\n        finally:\n            closer()\n\n    def make_shell(self):\n        shells = {}\n\n        priority_order = ['ipython', 'bpython']\n\n        for ep in self.pkg_resources.iter_entry_points('pyramid.pshell'):\n            name = ep.name\n            shell_module = ep.load()\n            shells[name] = shell_module\n\n        sorted_shells = sorted(\n            shells.items(), key=lambda x: priority_order.index(x[0])\n        )\n\n        shell = None\n        user_shell = self.options.python_shell.lower()\n\n        if not user_shell:\n            for name, factory in sorted_shells:\n                shell = factory()\n\n                if shell is not None:\n                    break\n        else:\n            factory = shells.get(user_shell)\n\n            if factory is not None:\n                shell = factory()\n\n        if shell is None:\n            shell = self.make_default_shell()\n\n        return shell\n\n    def make_default_shell(self, interact=interact):\n        def shell(env, help):\n            cprt = 'Type \"help\" for more information.'\n            banner = \"Python %s on %s\\n%s\" % (sys.version, sys.platform, cprt)\n            banner += '\\n\\n' + help + '\\n'\n            interact(banner, local=env)\n        return shell\n\n    @classmethod\n    def make_bpython_shell(cls, BPShell=None):\n        if BPShell is None: # pragma: no cover\n            try:\n                from bpython import embed\n                BPShell = embed\n            except ImportError:\n                return None\n        def shell(env, help):\n            BPShell(locals_=env, banner=help + '\\n')\n        return shell\n\n    @classmethod\n    def make_ipython_shell(cls, IPShellFactory=None):\n        if IPShellFactory is None: # pragma: no cover\n            try:\n                from IPython.terminal.embed import (\n                    InteractiveShellEmbed)\n                IPShellFactory = InteractiveShellEmbed\n            except ImportError:\n                return None\n        def shell(env, help):\n            IPShell = IPShellFactory(banner2=help + '\\n', user_ns=env)\n            IPShell()\n        return shell",
                                "ast_type_str": "ClassDef",
                                "start_lineno": 22,
                                "end_lineno": 230,
                                "parent": null
                            }
                        },
                        {
                            "file_name": "pyramid/scripts/pshell.py",
                            "type": "class",
                            "name": "PShellCommand",
                            "content": "class PShellCommand(object):\n    usage = '%prog config_uri'\n    description = \"\"\"\\\n    Open an interactive shell with a Pyramid app loaded.  This command\n    accepts one positional argument named \"config_uri\" which specifies the\n    PasteDeploy config file to use for the interactive shell. The format is\n    \"inifile#name\". If the name is left off, the Pyramid default application\n    will be assumed.  Example: \"pshell myapp.ini#main\"\n\n    If you do not point the loader directly at the section of the ini file\n    containing your Pyramid application, the command will attempt to\n    find the app for you. If you are loading a pipeline that contains more\n    than one Pyramid application within it, the loader will use the\n    last one.\n    \"\"\"\n    bootstrap = (bootstrap,)  # for testing\n    pkg_resources = pkg_resources  # for testing\n\n    parser = optparse.OptionParser(\n        usage,\n        description=textwrap.dedent(description)\n        )\n    parser.add_option('-p', '--python-shell',\n                      action='store', type='string', dest='python_shell',\n                      default='', help='ipython | bpython | python')\n    parser.add_option('--setup',\n                      dest='setup',\n                      help=(\"A callable that will be passed the environment \"\n                            \"before it is made available to the shell. This \"\n                            \"option will override the 'setup' key in the \"\n                            \"[pshell] ini section.\"))\n\n    ConfigParser = configparser.ConfigParser # testing\n\n    loaded_objects = {}\n    object_help = {}\n    setup = None\n    pystartup = os.environ.get('PYTHONSTARTUP')\n\n    def __init__(self, argv, quiet=False):\n        self.quiet = quiet\n        self.options, self.args = self.parser.parse_args(argv[1:])\n\n    def pshell_file_config(self, filename):\n        config = self.ConfigParser()\n        config.read(filename)\n        try:\n            items = config.items('pshell')\n        except configparser.NoSectionError:\n            return\n\n        resolver = DottedNameResolver(None)\n        self.loaded_objects = {}\n        self.object_help = {}\n        self.setup = None\n        for k, v in items:\n            if k == 'setup':\n                self.setup = v\n            else:\n                self.loaded_objects[k] = resolver.maybe_resolve(v)\n                self.object_help[k] = v\n\n    def out(self, msg): # pragma: no cover\n        if not self.quiet:\n            print(msg)\n\n    def run(self, shell=None):\n        if not self.args:\n            self.out('Requires a config file argument')\n            return 2\n        config_uri = self.args[0]\n        config_file = config_uri.split('#', 1)[0]\n        setup_logging(config_file)\n        self.pshell_file_config(config_file)\n\n        # bootstrap the environ\n        env = self.bootstrap[0](config_uri, options=parse_vars(self.args[1:]))\n\n        # remove the closer from the env\n        closer = env.pop('closer')\n\n        # setup help text for default environment\n        env_help = dict(env)\n        env_help['app'] = 'The WSGI application.'\n        env_help['root'] = 'Root of the default resource tree.'\n        env_help['registry'] = 'Active Pyramid registry.'\n        env_help['request'] = 'Active request object.'\n        env_help['root_factory'] = (\n            'Default root factory used to create `root`.')\n\n        # override use_script with command-line options\n        if self.options.setup:\n            self.setup = self.options.setup\n\n        if self.setup:\n            # store the env before muddling it with the script\n            orig_env = env.copy()\n\n            # call the setup callable\n            resolver = DottedNameResolver(None)\n            setup = resolver.maybe_resolve(self.setup)\n            setup(env)\n\n            # remove any objects from default help that were overidden\n            for k, v in env.items():\n                if k not in orig_env or env[k] != orig_env[k]:\n                    env_help[k] = v\n\n        # load the pshell section of the ini file\n        env.update(self.loaded_objects)\n\n        # eliminate duplicates from env, allowing custom vars to override\n        for k in self.loaded_objects:\n            if k in env_help:\n                del env_help[k]\n\n        # generate help text\n        help = ''\n        if env_help:\n            help += 'Environment:'\n            for var in sorted(env_help.keys()):\n                help += '\\n  %-12s %s' % (var, env_help[var])\n\n        if self.object_help:\n            help += '\\n\\nCustom Variables:'\n            for var in sorted(self.object_help.keys()):\n                help += '\\n  %-12s %s' % (var, self.object_help[var])\n\n        if shell is None:\n            shell = self.make_shell()\n\n        if self.pystartup and os.path.isfile(self.pystartup):\n            with open(self.pystartup, 'rb') as fp:\n                exec_(fp.read().decode('utf-8'), env)\n            if '__builtins__' in env:\n                del env['__builtins__']\n\n        try:\n            shell(env, help)\n        finally:\n            closer()\n\n    def make_shell(self):\n        shells = {}\n\n        priority_order = ['ipython', 'bpython']\n\n        for ep in self.pkg_resources.iter_entry_points('pyramid.pshell'):\n            name = ep.name\n            shell_module = ep.load()\n            shells[name] = shell_module\n\n        sorted_shells = sorted(\n            shells.items(), key=lambda x: priority_order.index(x[0])\n        )\n\n        shell = None\n        user_shell = self.options.python_shell.lower()\n\n        if not user_shell:\n            for name, factory in sorted_shells:\n                shell = factory()\n\n                if shell is not None:\n                    break\n        else:\n            factory = shells.get(user_shell)\n\n            if factory is not None:\n                shell = factory()\n\n        if shell is None:\n            shell = self.make_default_shell()\n\n        return shell\n\n    def make_default_shell(self, interact=interact):\n        def shell(env, help):\n            cprt = 'Type \"help\" for more information.'\n            banner = \"Python %s on %s\\n%s\" % (sys.version, sys.platform, cprt)\n            banner += '\\n\\n' + help + '\\n'\n            interact(banner, local=env)\n        return shell\n\n    @classmethod\n    def make_bpython_shell(cls, BPShell=None):\n        if BPShell is None: # pragma: no cover\n            try:\n                from bpython import embed\n                BPShell = embed\n            except ImportError:\n                return None\n        def shell(env, help):\n            BPShell(locals_=env, banner=help + '\\n')\n        return shell\n\n    @classmethod\n    def make_ipython_shell(cls, IPShellFactory=None):\n        if IPShellFactory is None: # pragma: no cover\n            try:\n                from IPython.terminal.embed import (\n                    InteractiveShellEmbed)\n                IPShellFactory = InteractiveShellEmbed\n            except ImportError:\n                return None\n        def shell(env, help):\n            IPShell = IPShellFactory(banner2=help + '\\n', user_ns=env)\n            IPShell()\n        return shell",
                            "ast_type_str": "ClassDef",
                            "start_lineno": 22,
                            "end_lineno": 230,
                            "parent": null
                        }
                    ],
                    "added_entities": [],
                    "deleted_entities": []
                },
                {
                    "descriptor": {
                        "old_range": {
                            "start": 159,
                            "length": 12
                        },
                        "new_range": {
                            "start": 164,
                            "length": 12
                        },
                        "section": "class PShellCommand(object):"
                    },
                    "line_group": {
                        "all_lines": [
                            {
                                "content": "        try:",
                                "type": "context"
                            },
                            {
                                "content": "            shell(env, help)",
                                "type": "context"
                            },
                            {
                                "content": "        finally:",
                                "type": "context"
                            },
                            {
                                "content": "            closer()",
                                "type": "deleted"
                            },
                            {
                                "content": "            self.closer()",
                                "type": "added"
                            },
                            {
                                "content": "",
                                "type": "context"
                            },
                            {
                                "content": "    def make_shell(self):",
                                "type": "context"
                            },
                            {
                                "content": "        shells = {}",
                                "type": "context"
                            },
                            {
                                "content": "",
                                "type": "context"
                            },
                            {
                                "content": "        priority_order = ['ipython', 'bpython']",
                                "type": "deleted"
                            },
                            {
                                "content": "        priority_order = ['ipython', 'bpython', 'python']",
                                "type": "added"
                            },
                            {
                                "content": "",
                                "type": "context"
                            },
                            {
                                "content": "        for ep in self.pkg_resources.iter_entry_points('pyramid.pshell'):",
                                "type": "context"
                            },
                            {
                                "content": "            name = ep.name",
                                "type": "context"
                            }
                        ]
                    },
                    "modified_entities": [
                        {
                            "file_name": "pyramid/scripts/pshell.py",
                            "type": "method",
                            "name": "PShellCommand.run",
                            "content": "class PShellCommand(object):\n    usage = '%prog config_uri'\n    description = \"\"\"\\\n    Open an interactive shell with a Pyramid app loaded.  This command\n    accepts one positional argument named \"config_uri\" which specifies the\n    PasteDeploy config file to use for the interactive shell. The format is\n    \"inifile#name\". If the name is left off, the Pyramid default application\n    will be assumed.  Example: \"pshell myapp.ini#main\"\n\n    If you do not point the loader directly at the section of the ini file\n    containing your Pyramid application, the command will attempt to\n    find the app for you. If you are loading a pipeline that contains more\n    than one Pyramid application within it, the loader will use the\n    last one.\n    \"\"\"\n    bootstrap = (bootstrap,)  # for testing\n    pkg_resources = pkg_resources  # for testing\n\n    parser = optparse.OptionParser(\n        usage,\n        description=textwrap.dedent(description)\n        )\n    parser.add_option('-p', '--python-shell',\n                      action='store', type='string', dest='python_shell',\n                      default='', help='ipython | bpython | python')\n    parser.add_option('--setup',\n                      dest='setup',\n                      help=(\"A callable that will be passed the environment \"\n                            \"before it is made available to the shell. This \"\n                            \"option will override the 'setup' key in the \"\n                            \"[pshell] ini section.\"))\n\n    ConfigParser = configparser.ConfigParser # testing\n\n    loaded_objects = {}\n    object_help = {}\n    setup = None\n    pystartup = os.environ.get('PYTHONSTARTUP')\n\n    def __init__(self, argv, quiet=False):\n        self.quiet = quiet\n        self.options, self.args = self.parser.parse_args(argv[1:])\n\n    def pshell_file_config(self, filename):\n        config = self.ConfigParser()\n        config.read(filename)\n        try:\n            items = config.items('pshell')\n        except configparser.NoSectionError:\n            return\n\n        resolver = DottedNameResolver(None)\n        self.loaded_objects = {}\n        self.object_help = {}\n        self.setup = None\n        for k, v in items:\n            if k == 'setup':\n                self.setup = v\n            else:\n                self.loaded_objects[k] = resolver.maybe_resolve(v)\n                self.object_help[k] = v\n\n    def out(self, msg): # pragma: no cover\n        if not self.quiet:\n            print(msg)\n\n    def run(self, shell=None):\n        if not self.args:\n            self.out('Requires a config file argument')\n            return 2\n        config_uri = self.args[0]\n        config_file = config_uri.split('#', 1)[0]\n        setup_logging(config_file)\n        self.pshell_file_config(config_file)\n\n        # bootstrap the environ\n        env = self.bootstrap[0](config_uri, options=parse_vars(self.args[1:]))\n\n        # remove the closer from the env\n        closer = env.pop('closer')\n\n        # setup help text for default environment\n        env_help = dict(env)\n        env_help['app'] = 'The WSGI application.'\n        env_help['root'] = 'Root of the default resource tree.'\n        env_help['registry'] = 'Active Pyramid registry.'\n        env_help['request'] = 'Active request object.'\n        env_help['root_factory'] = (\n            'Default root factory used to create `root`.')\n\n        # override use_script with command-line options\n        if self.options.setup:\n            self.setup = self.options.setup\n\n        if self.setup:\n            # store the env before muddling it with the script\n            orig_env = env.copy()\n\n            # call the setup callable\n            resolver = DottedNameResolver(None)\n            setup = resolver.maybe_resolve(self.setup)\n            setup(env)\n\n            # remove any objects from default help that were overidden\n            for k, v in env.items():\n                if k not in orig_env or env[k] != orig_env[k]:\n                    env_help[k] = v\n\n        # load the pshell section of the ini file\n        env.update(self.loaded_objects)\n\n        # eliminate duplicates from env, allowing custom vars to override\n        for k in self.loaded_objects:\n            if k in env_help:\n                del env_help[k]\n\n        # generate help text\n        help = ''\n        if env_help:\n            help += 'Environment:'\n            for var in sorted(env_help.keys()):\n                help += '\\n  %-12s %s' % (var, env_help[var])\n\n        if self.object_help:\n            help += '\\n\\nCustom Variables:'\n            for var in sorted(self.object_help.keys()):\n                help += '\\n  %-12s %s' % (var, self.object_help[var])\n\n        if shell is None:\n            shell = self.make_shell()\n\n        if self.pystartup and os.path.isfile(self.pystartup):\n            with open(self.pystartup, 'rb') as fp:\n                exec_(fp.read().decode('utf-8'), env)\n            if '__builtins__' in env:\n                del env['__builtins__']\n\n        try:\n            shell(env, help)\n        finally:\n            closer()\n\n    def make_shell(self):\n        shells = {}\n\n        priority_order = ['ipython', 'bpython']\n\n        for ep in self.pkg_resources.iter_entry_points('pyramid.pshell'):\n            name = ep.name\n            shell_module = ep.load()\n            shells[name] = shell_module\n\n        sorted_shells = sorted(\n            shells.items(), key=lambda x: priority_order.index(x[0])\n        )\n\n        shell = None\n        user_shell = self.options.python_shell.lower()\n\n        if not user_shell:\n            for name, factory in sorted_shells:\n                shell = factory()\n\n                if shell is not None:\n                    break\n        else:\n            factory = shells.get(user_shell)\n\n            if factory is not None:\n                shell = factory()\n\n        if shell is None:\n            shell = self.make_default_shell()\n\n        return shell\n\n    def make_default_shell(self, interact=interact):\n        def shell(env, help):\n            cprt = 'Type \"help\" for more information.'\n            banner = \"Python %s on %s\\n%s\" % (sys.version, sys.platform, cprt)\n            banner += '\\n\\n' + help + '\\n'\n            interact(banner, local=env)\n        return shell\n\n    @classmethod\n    def make_bpython_shell(cls, BPShell=None):\n        if BPShell is None: # pragma: no cover\n            try:\n                from bpython import embed\n                BPShell = embed\n            except ImportError:\n                return None\n        def shell(env, help):\n            BPShell(locals_=env, banner=help + '\\n')\n        return shell\n\n    @classmethod\n    def make_ipython_shell(cls, IPShellFactory=None):\n        if IPShellFactory is None: # pragma: no cover\n            try:\n                from IPython.terminal.embed import (\n                    InteractiveShellEmbed)\n                IPShellFactory = InteractiveShellEmbed\n            except ImportError:\n                return None\n        def shell(env, help):\n            IPShell = IPShellFactory(banner2=help + '\\n', user_ns=env)\n            IPShell()\n        return shell",
                            "ast_type_str": "ClassDef",
                            "start_lineno": 88,
                            "end_lineno": 162,
                            "parent": {
                                "file_name": "pyramid/scripts/pshell.py",
                                "type": "class",
                                "name": "PShellCommand",
                                "content": "class PShellCommand(object):\n    usage = '%prog config_uri'\n    description = \"\"\"\\\n    Open an interactive shell with a Pyramid app loaded.  This command\n    accepts one positional argument named \"config_uri\" which specifies the\n    PasteDeploy config file to use for the interactive shell. The format is\n    \"inifile#name\". If the name is left off, the Pyramid default application\n    will be assumed.  Example: \"pshell myapp.ini#main\"\n\n    If you do not point the loader directly at the section of the ini file\n    containing your Pyramid application, the command will attempt to\n    find the app for you. If you are loading a pipeline that contains more\n    than one Pyramid application within it, the loader will use the\n    last one.\n    \"\"\"\n    bootstrap = (bootstrap,)  # for testing\n    pkg_resources = pkg_resources  # for testing\n\n    parser = optparse.OptionParser(\n        usage,\n        description=textwrap.dedent(description)\n        )\n    parser.add_option('-p', '--python-shell',\n                      action='store', type='string', dest='python_shell',\n                      default='', help='ipython | bpython | python')\n    parser.add_option('--setup',\n                      dest='setup',\n                      help=(\"A callable that will be passed the environment \"\n                            \"before it is made available to the shell. This \"\n                            \"option will override the 'setup' key in the \"\n                            \"[pshell] ini section.\"))\n\n    ConfigParser = configparser.ConfigParser # testing\n\n    loaded_objects = {}\n    object_help = {}\n    setup = None\n    pystartup = os.environ.get('PYTHONSTARTUP')\n\n    def __init__(self, argv, quiet=False):\n        self.quiet = quiet\n        self.options, self.args = self.parser.parse_args(argv[1:])\n\n    def pshell_file_config(self, filename):\n        config = self.ConfigParser()\n        config.read(filename)\n        try:\n            items = config.items('pshell')\n        except configparser.NoSectionError:\n            return\n\n        resolver = DottedNameResolver(None)\n        self.loaded_objects = {}\n        self.object_help = {}\n        self.setup = None\n        for k, v in items:\n            if k == 'setup':\n                self.setup = v\n            else:\n                self.loaded_objects[k] = resolver.maybe_resolve(v)\n                self.object_help[k] = v\n\n    def out(self, msg): # pragma: no cover\n        if not self.quiet:\n            print(msg)\n\n    def run(self, shell=None):\n        if not self.args:\n            self.out('Requires a config file argument')\n            return 2\n        config_uri = self.args[0]\n        config_file = config_uri.split('#', 1)[0]\n        setup_logging(config_file)\n        self.pshell_file_config(config_file)\n\n        # bootstrap the environ\n        env = self.bootstrap[0](config_uri, options=parse_vars(self.args[1:]))\n\n        # remove the closer from the env\n        closer = env.pop('closer')\n\n        # setup help text for default environment\n        env_help = dict(env)\n        env_help['app'] = 'The WSGI application.'\n        env_help['root'] = 'Root of the default resource tree.'\n        env_help['registry'] = 'Active Pyramid registry.'\n        env_help['request'] = 'Active request object.'\n        env_help['root_factory'] = (\n            'Default root factory used to create `root`.')\n\n        # override use_script with command-line options\n        if self.options.setup:\n            self.setup = self.options.setup\n\n        if self.setup:\n            # store the env before muddling it with the script\n            orig_env = env.copy()\n\n            # call the setup callable\n            resolver = DottedNameResolver(None)\n            setup = resolver.maybe_resolve(self.setup)\n            setup(env)\n\n            # remove any objects from default help that were overidden\n            for k, v in env.items():\n                if k not in orig_env or env[k] != orig_env[k]:\n                    env_help[k] = v\n\n        # load the pshell section of the ini file\n        env.update(self.loaded_objects)\n\n        # eliminate duplicates from env, allowing custom vars to override\n        for k in self.loaded_objects:\n            if k in env_help:\n                del env_help[k]\n\n        # generate help text\n        help = ''\n        if env_help:\n            help += 'Environment:'\n            for var in sorted(env_help.keys()):\n                help += '\\n  %-12s %s' % (var, env_help[var])\n\n        if self.object_help:\n            help += '\\n\\nCustom Variables:'\n            for var in sorted(self.object_help.keys()):\n                help += '\\n  %-12s %s' % (var, self.object_help[var])\n\n        if shell is None:\n            shell = self.make_shell()\n\n        if self.pystartup and os.path.isfile(self.pystartup):\n            with open(self.pystartup, 'rb') as fp:\n                exec_(fp.read().decode('utf-8'), env)\n            if '__builtins__' in env:\n                del env['__builtins__']\n\n        try:\n            shell(env, help)\n        finally:\n            closer()\n\n    def make_shell(self):\n        shells = {}\n\n        priority_order = ['ipython', 'bpython']\n\n        for ep in self.pkg_resources.iter_entry_points('pyramid.pshell'):\n            name = ep.name\n            shell_module = ep.load()\n            shells[name] = shell_module\n\n        sorted_shells = sorted(\n            shells.items(), key=lambda x: priority_order.index(x[0])\n        )\n\n        shell = None\n        user_shell = self.options.python_shell.lower()\n\n        if not user_shell:\n            for name, factory in sorted_shells:\n                shell = factory()\n\n                if shell is not None:\n                    break\n        else:\n            factory = shells.get(user_shell)\n\n            if factory is not None:\n                shell = factory()\n\n        if shell is None:\n            shell = self.make_default_shell()\n\n        return shell\n\n    def make_default_shell(self, interact=interact):\n        def shell(env, help):\n            cprt = 'Type \"help\" for more information.'\n            banner = \"Python %s on %s\\n%s\" % (sys.version, sys.platform, cprt)\n            banner += '\\n\\n' + help + '\\n'\n            interact(banner, local=env)\n        return shell\n\n    @classmethod\n    def make_bpython_shell(cls, BPShell=None):\n        if BPShell is None: # pragma: no cover\n            try:\n                from bpython import embed\n                BPShell = embed\n            except ImportError:\n                return None\n        def shell(env, help):\n            BPShell(locals_=env, banner=help + '\\n')\n        return shell\n\n    @classmethod\n    def make_ipython_shell(cls, IPShellFactory=None):\n        if IPShellFactory is None: # pragma: no cover\n            try:\n                from IPython.terminal.embed import (\n                    InteractiveShellEmbed)\n                IPShellFactory = InteractiveShellEmbed\n            except ImportError:\n                return None\n        def shell(env, help):\n            IPShell = IPShellFactory(banner2=help + '\\n', user_ns=env)\n            IPShell()\n        return shell",
                                "ast_type_str": "ClassDef",
                                "start_lineno": 22,
                                "end_lineno": 230,
                                "parent": null
                            }
                        },
                        {
                            "file_name": "pyramid/scripts/pshell.py",
                            "type": "method",
                            "name": "PShellCommand.make_shell",
                            "content": "class PShellCommand(object):\n    usage = '%prog config_uri'\n    description = \"\"\"\\\n    Open an interactive shell with a Pyramid app loaded.  This command\n    accepts one positional argument named \"config_uri\" which specifies the\n    PasteDeploy config file to use for the interactive shell. The format is\n    \"inifile#name\". If the name is left off, the Pyramid default application\n    will be assumed.  Example: \"pshell myapp.ini#main\"\n\n    If you do not point the loader directly at the section of the ini file\n    containing your Pyramid application, the command will attempt to\n    find the app for you. If you are loading a pipeline that contains more\n    than one Pyramid application within it, the loader will use the\n    last one.\n    \"\"\"\n    bootstrap = (bootstrap,)  # for testing\n    pkg_resources = pkg_resources  # for testing\n\n    parser = optparse.OptionParser(\n        usage,\n        description=textwrap.dedent(description)\n        )\n    parser.add_option('-p', '--python-shell',\n                      action='store', type='string', dest='python_shell',\n                      default='', help='ipython | bpython | python')\n    parser.add_option('--setup',\n                      dest='setup',\n                      help=(\"A callable that will be passed the environment \"\n                            \"before it is made available to the shell. This \"\n                            \"option will override the 'setup' key in the \"\n                            \"[pshell] ini section.\"))\n\n    ConfigParser = configparser.ConfigParser # testing\n\n    loaded_objects = {}\n    object_help = {}\n    setup = None\n    pystartup = os.environ.get('PYTHONSTARTUP')\n\n    def __init__(self, argv, quiet=False):\n        self.quiet = quiet\n        self.options, self.args = self.parser.parse_args(argv[1:])\n\n    def pshell_file_config(self, filename):\n        config = self.ConfigParser()\n        config.read(filename)\n        try:\n            items = config.items('pshell')\n        except configparser.NoSectionError:\n            return\n\n        resolver = DottedNameResolver(None)\n        self.loaded_objects = {}\n        self.object_help = {}\n        self.setup = None\n        for k, v in items:\n            if k == 'setup':\n                self.setup = v\n            else:\n                self.loaded_objects[k] = resolver.maybe_resolve(v)\n                self.object_help[k] = v\n\n    def out(self, msg): # pragma: no cover\n        if not self.quiet:\n            print(msg)\n\n    def run(self, shell=None):\n        if not self.args:\n            self.out('Requires a config file argument')\n            return 2\n        config_uri = self.args[0]\n        config_file = config_uri.split('#', 1)[0]\n        setup_logging(config_file)\n        self.pshell_file_config(config_file)\n\n        # bootstrap the environ\n        env = self.bootstrap[0](config_uri, options=parse_vars(self.args[1:]))\n\n        # remove the closer from the env\n        closer = env.pop('closer')\n\n        # setup help text for default environment\n        env_help = dict(env)\n        env_help['app'] = 'The WSGI application.'\n        env_help['root'] = 'Root of the default resource tree.'\n        env_help['registry'] = 'Active Pyramid registry.'\n        env_help['request'] = 'Active request object.'\n        env_help['root_factory'] = (\n            'Default root factory used to create `root`.')\n\n        # override use_script with command-line options\n        if self.options.setup:\n            self.setup = self.options.setup\n\n        if self.setup:\n            # store the env before muddling it with the script\n            orig_env = env.copy()\n\n            # call the setup callable\n            resolver = DottedNameResolver(None)\n            setup = resolver.maybe_resolve(self.setup)\n            setup(env)\n\n            # remove any objects from default help that were overidden\n            for k, v in env.items():\n                if k not in orig_env or env[k] != orig_env[k]:\n                    env_help[k] = v\n\n        # load the pshell section of the ini file\n        env.update(self.loaded_objects)\n\n        # eliminate duplicates from env, allowing custom vars to override\n        for k in self.loaded_objects:\n            if k in env_help:\n                del env_help[k]\n\n        # generate help text\n        help = ''\n        if env_help:\n            help += 'Environment:'\n            for var in sorted(env_help.keys()):\n                help += '\\n  %-12s %s' % (var, env_help[var])\n\n        if self.object_help:\n            help += '\\n\\nCustom Variables:'\n            for var in sorted(self.object_help.keys()):\n                help += '\\n  %-12s %s' % (var, self.object_help[var])\n\n        if shell is None:\n            shell = self.make_shell()\n\n        if self.pystartup and os.path.isfile(self.pystartup):\n            with open(self.pystartup, 'rb') as fp:\n                exec_(fp.read().decode('utf-8'), env)\n            if '__builtins__' in env:\n                del env['__builtins__']\n\n        try:\n            shell(env, help)\n        finally:\n            closer()\n\n    def make_shell(self):\n        shells = {}\n\n        priority_order = ['ipython', 'bpython']\n\n        for ep in self.pkg_resources.iter_entry_points('pyramid.pshell'):\n            name = ep.name\n            shell_module = ep.load()\n            shells[name] = shell_module\n\n        sorted_shells = sorted(\n            shells.items(), key=lambda x: priority_order.index(x[0])\n        )\n\n        shell = None\n        user_shell = self.options.python_shell.lower()\n\n        if not user_shell:\n            for name, factory in sorted_shells:\n                shell = factory()\n\n                if shell is not None:\n                    break\n        else:\n            factory = shells.get(user_shell)\n\n            if factory is not None:\n                shell = factory()\n\n        if shell is None:\n            shell = self.make_default_shell()\n\n        return shell\n\n    def make_default_shell(self, interact=interact):\n        def shell(env, help):\n            cprt = 'Type \"help\" for more information.'\n            banner = \"Python %s on %s\\n%s\" % (sys.version, sys.platform, cprt)\n            banner += '\\n\\n' + help + '\\n'\n            interact(banner, local=env)\n        return shell\n\n    @classmethod\n    def make_bpython_shell(cls, BPShell=None):\n        if BPShell is None: # pragma: no cover\n            try:\n                from bpython import embed\n                BPShell = embed\n            except ImportError:\n                return None\n        def shell(env, help):\n            BPShell(locals_=env, banner=help + '\\n')\n        return shell\n\n    @classmethod\n    def make_ipython_shell(cls, IPShellFactory=None):\n        if IPShellFactory is None: # pragma: no cover\n            try:\n                from IPython.terminal.embed import (\n                    InteractiveShellEmbed)\n                IPShellFactory = InteractiveShellEmbed\n            except ImportError:\n                return None\n        def shell(env, help):\n            IPShell = IPShellFactory(banner2=help + '\\n', user_ns=env)\n            IPShell()\n        return shell",
                            "ast_type_str": "ClassDef",
                            "start_lineno": 164,
                            "end_lineno": 196,
                            "parent": {
                                "file_name": "pyramid/scripts/pshell.py",
                                "type": "class",
                                "name": "PShellCommand",
                                "content": "class PShellCommand(object):\n    usage = '%prog config_uri'\n    description = \"\"\"\\\n    Open an interactive shell with a Pyramid app loaded.  This command\n    accepts one positional argument named \"config_uri\" which specifies the\n    PasteDeploy config file to use for the interactive shell. The format is\n    \"inifile#name\". If the name is left off, the Pyramid default application\n    will be assumed.  Example: \"pshell myapp.ini#main\"\n\n    If you do not point the loader directly at the section of the ini file\n    containing your Pyramid application, the command will attempt to\n    find the app for you. If you are loading a pipeline that contains more\n    than one Pyramid application within it, the loader will use the\n    last one.\n    \"\"\"\n    bootstrap = (bootstrap,)  # for testing\n    pkg_resources = pkg_resources  # for testing\n\n    parser = optparse.OptionParser(\n        usage,\n        description=textwrap.dedent(description)\n        )\n    parser.add_option('-p', '--python-shell',\n                      action='store', type='string', dest='python_shell',\n                      default='', help='ipython | bpython | python')\n    parser.add_option('--setup',\n                      dest='setup',\n                      help=(\"A callable that will be passed the environment \"\n                            \"before it is made available to the shell. This \"\n                            \"option will override the 'setup' key in the \"\n                            \"[pshell] ini section.\"))\n\n    ConfigParser = configparser.ConfigParser # testing\n\n    loaded_objects = {}\n    object_help = {}\n    setup = None\n    pystartup = os.environ.get('PYTHONSTARTUP')\n\n    def __init__(self, argv, quiet=False):\n        self.quiet = quiet\n        self.options, self.args = self.parser.parse_args(argv[1:])\n\n    def pshell_file_config(self, filename):\n        config = self.ConfigParser()\n        config.read(filename)\n        try:\n            items = config.items('pshell')\n        except configparser.NoSectionError:\n            return\n\n        resolver = DottedNameResolver(None)\n        self.loaded_objects = {}\n        self.object_help = {}\n        self.setup = None\n        for k, v in items:\n            if k == 'setup':\n                self.setup = v\n            else:\n                self.loaded_objects[k] = resolver.maybe_resolve(v)\n                self.object_help[k] = v\n\n    def out(self, msg): # pragma: no cover\n        if not self.quiet:\n            print(msg)\n\n    def run(self, shell=None):\n        if not self.args:\n            self.out('Requires a config file argument')\n            return 2\n        config_uri = self.args[0]\n        config_file = config_uri.split('#', 1)[0]\n        setup_logging(config_file)\n        self.pshell_file_config(config_file)\n\n        # bootstrap the environ\n        env = self.bootstrap[0](config_uri, options=parse_vars(self.args[1:]))\n\n        # remove the closer from the env\n        closer = env.pop('closer')\n\n        # setup help text for default environment\n        env_help = dict(env)\n        env_help['app'] = 'The WSGI application.'\n        env_help['root'] = 'Root of the default resource tree.'\n        env_help['registry'] = 'Active Pyramid registry.'\n        env_help['request'] = 'Active request object.'\n        env_help['root_factory'] = (\n            'Default root factory used to create `root`.')\n\n        # override use_script with command-line options\n        if self.options.setup:\n            self.setup = self.options.setup\n\n        if self.setup:\n            # store the env before muddling it with the script\n            orig_env = env.copy()\n\n            # call the setup callable\n            resolver = DottedNameResolver(None)\n            setup = resolver.maybe_resolve(self.setup)\n            setup(env)\n\n            # remove any objects from default help that were overidden\n            for k, v in env.items():\n                if k not in orig_env or env[k] != orig_env[k]:\n                    env_help[k] = v\n\n        # load the pshell section of the ini file\n        env.update(self.loaded_objects)\n\n        # eliminate duplicates from env, allowing custom vars to override\n        for k in self.loaded_objects:\n            if k in env_help:\n                del env_help[k]\n\n        # generate help text\n        help = ''\n        if env_help:\n            help += 'Environment:'\n            for var in sorted(env_help.keys()):\n                help += '\\n  %-12s %s' % (var, env_help[var])\n\n        if self.object_help:\n            help += '\\n\\nCustom Variables:'\n            for var in sorted(self.object_help.keys()):\n                help += '\\n  %-12s %s' % (var, self.object_help[var])\n\n        if shell is None:\n            shell = self.make_shell()\n\n        if self.pystartup and os.path.isfile(self.pystartup):\n            with open(self.pystartup, 'rb') as fp:\n                exec_(fp.read().decode('utf-8'), env)\n            if '__builtins__' in env:\n                del env['__builtins__']\n\n        try:\n            shell(env, help)\n        finally:\n            closer()\n\n    def make_shell(self):\n        shells = {}\n\n        priority_order = ['ipython', 'bpython']\n\n        for ep in self.pkg_resources.iter_entry_points('pyramid.pshell'):\n            name = ep.name\n            shell_module = ep.load()\n            shells[name] = shell_module\n\n        sorted_shells = sorted(\n            shells.items(), key=lambda x: priority_order.index(x[0])\n        )\n\n        shell = None\n        user_shell = self.options.python_shell.lower()\n\n        if not user_shell:\n            for name, factory in sorted_shells:\n                shell = factory()\n\n                if shell is not None:\n                    break\n        else:\n            factory = shells.get(user_shell)\n\n            if factory is not None:\n                shell = factory()\n\n        if shell is None:\n            shell = self.make_default_shell()\n\n        return shell\n\n    def make_default_shell(self, interact=interact):\n        def shell(env, help):\n            cprt = 'Type \"help\" for more information.'\n            banner = \"Python %s on %s\\n%s\" % (sys.version, sys.platform, cprt)\n            banner += '\\n\\n' + help + '\\n'\n            interact(banner, local=env)\n        return shell\n\n    @classmethod\n    def make_bpython_shell(cls, BPShell=None):\n        if BPShell is None: # pragma: no cover\n            try:\n                from bpython import embed\n                BPShell = embed\n            except ImportError:\n                return None\n        def shell(env, help):\n            BPShell(locals_=env, banner=help + '\\n')\n        return shell\n\n    @classmethod\n    def make_ipython_shell(cls, IPShellFactory=None):\n        if IPShellFactory is None: # pragma: no cover\n            try:\n                from IPython.terminal.embed import (\n                    InteractiveShellEmbed)\n                IPShellFactory = InteractiveShellEmbed\n            except ImportError:\n                return None\n        def shell(env, help):\n            IPShell = IPShellFactory(banner2=help + '\\n', user_ns=env)\n            IPShell()\n        return shell",
                                "ast_type_str": "ClassDef",
                                "start_lineno": 22,
                                "end_lineno": 230,
                                "parent": null
                            }
                        },
                        {
                            "file_name": "pyramid/scripts/pshell.py",
                            "type": "class",
                            "name": "PShellCommand",
                            "content": "class PShellCommand(object):\n    usage = '%prog config_uri'\n    description = \"\"\"\\\n    Open an interactive shell with a Pyramid app loaded.  This command\n    accepts one positional argument named \"config_uri\" which specifies the\n    PasteDeploy config file to use for the interactive shell. The format is\n    \"inifile#name\". If the name is left off, the Pyramid default application\n    will be assumed.  Example: \"pshell myapp.ini#main\"\n\n    If you do not point the loader directly at the section of the ini file\n    containing your Pyramid application, the command will attempt to\n    find the app for you. If you are loading a pipeline that contains more\n    than one Pyramid application within it, the loader will use the\n    last one.\n    \"\"\"\n    bootstrap = (bootstrap,)  # for testing\n    pkg_resources = pkg_resources  # for testing\n\n    parser = optparse.OptionParser(\n        usage,\n        description=textwrap.dedent(description)\n        )\n    parser.add_option('-p', '--python-shell',\n                      action='store', type='string', dest='python_shell',\n                      default='', help='ipython | bpython | python')\n    parser.add_option('--setup',\n                      dest='setup',\n                      help=(\"A callable that will be passed the environment \"\n                            \"before it is made available to the shell. This \"\n                            \"option will override the 'setup' key in the \"\n                            \"[pshell] ini section.\"))\n\n    ConfigParser = configparser.ConfigParser # testing\n\n    loaded_objects = {}\n    object_help = {}\n    setup = None\n    pystartup = os.environ.get('PYTHONSTARTUP')\n\n    def __init__(self, argv, quiet=False):\n        self.quiet = quiet\n        self.options, self.args = self.parser.parse_args(argv[1:])\n\n    def pshell_file_config(self, filename):\n        config = self.ConfigParser()\n        config.read(filename)\n        try:\n            items = config.items('pshell')\n        except configparser.NoSectionError:\n            return\n\n        resolver = DottedNameResolver(None)\n        self.loaded_objects = {}\n        self.object_help = {}\n        self.setup = None\n        for k, v in items:\n            if k == 'setup':\n                self.setup = v\n            else:\n                self.loaded_objects[k] = resolver.maybe_resolve(v)\n                self.object_help[k] = v\n\n    def out(self, msg): # pragma: no cover\n        if not self.quiet:\n            print(msg)\n\n    def run(self, shell=None):\n        if not self.args:\n            self.out('Requires a config file argument')\n            return 2\n        config_uri = self.args[0]\n        config_file = config_uri.split('#', 1)[0]\n        setup_logging(config_file)\n        self.pshell_file_config(config_file)\n\n        # bootstrap the environ\n        env = self.bootstrap[0](config_uri, options=parse_vars(self.args[1:]))\n\n        # remove the closer from the env\n        closer = env.pop('closer')\n\n        # setup help text for default environment\n        env_help = dict(env)\n        env_help['app'] = 'The WSGI application.'\n        env_help['root'] = 'Root of the default resource tree.'\n        env_help['registry'] = 'Active Pyramid registry.'\n        env_help['request'] = 'Active request object.'\n        env_help['root_factory'] = (\n            'Default root factory used to create `root`.')\n\n        # override use_script with command-line options\n        if self.options.setup:\n            self.setup = self.options.setup\n\n        if self.setup:\n            # store the env before muddling it with the script\n            orig_env = env.copy()\n\n            # call the setup callable\n            resolver = DottedNameResolver(None)\n            setup = resolver.maybe_resolve(self.setup)\n            setup(env)\n\n            # remove any objects from default help that were overidden\n            for k, v in env.items():\n                if k not in orig_env or env[k] != orig_env[k]:\n                    env_help[k] = v\n\n        # load the pshell section of the ini file\n        env.update(self.loaded_objects)\n\n        # eliminate duplicates from env, allowing custom vars to override\n        for k in self.loaded_objects:\n            if k in env_help:\n                del env_help[k]\n\n        # generate help text\n        help = ''\n        if env_help:\n            help += 'Environment:'\n            for var in sorted(env_help.keys()):\n                help += '\\n  %-12s %s' % (var, env_help[var])\n\n        if self.object_help:\n            help += '\\n\\nCustom Variables:'\n            for var in sorted(self.object_help.keys()):\n                help += '\\n  %-12s %s' % (var, self.object_help[var])\n\n        if shell is None:\n            shell = self.make_shell()\n\n        if self.pystartup and os.path.isfile(self.pystartup):\n            with open(self.pystartup, 'rb') as fp:\n                exec_(fp.read().decode('utf-8'), env)\n            if '__builtins__' in env:\n                del env['__builtins__']\n\n        try:\n            shell(env, help)\n        finally:\n            closer()\n\n    def make_shell(self):\n        shells = {}\n\n        priority_order = ['ipython', 'bpython']\n\n        for ep in self.pkg_resources.iter_entry_points('pyramid.pshell'):\n            name = ep.name\n            shell_module = ep.load()\n            shells[name] = shell_module\n\n        sorted_shells = sorted(\n            shells.items(), key=lambda x: priority_order.index(x[0])\n        )\n\n        shell = None\n        user_shell = self.options.python_shell.lower()\n\n        if not user_shell:\n            for name, factory in sorted_shells:\n                shell = factory()\n\n                if shell is not None:\n                    break\n        else:\n            factory = shells.get(user_shell)\n\n            if factory is not None:\n                shell = factory()\n\n        if shell is None:\n            shell = self.make_default_shell()\n\n        return shell\n\n    def make_default_shell(self, interact=interact):\n        def shell(env, help):\n            cprt = 'Type \"help\" for more information.'\n            banner = \"Python %s on %s\\n%s\" % (sys.version, sys.platform, cprt)\n            banner += '\\n\\n' + help + '\\n'\n            interact(banner, local=env)\n        return shell\n\n    @classmethod\n    def make_bpython_shell(cls, BPShell=None):\n        if BPShell is None: # pragma: no cover\n            try:\n                from bpython import embed\n                BPShell = embed\n            except ImportError:\n                return None\n        def shell(env, help):\n            BPShell(locals_=env, banner=help + '\\n')\n        return shell\n\n    @classmethod\n    def make_ipython_shell(cls, IPShellFactory=None):\n        if IPShellFactory is None: # pragma: no cover\n            try:\n                from IPython.terminal.embed import (\n                    InteractiveShellEmbed)\n                IPShellFactory = InteractiveShellEmbed\n            except ImportError:\n                return None\n        def shell(env, help):\n            IPShell = IPShellFactory(banner2=help + '\\n', user_ns=env)\n            IPShell()\n        return shell",
                            "ast_type_str": "ClassDef",
                            "start_lineno": 22,
                            "end_lineno": 230,
                            "parent": null
                        }
                    ],
                    "added_entities": [],
                    "deleted_entities": []
                },
                {
                    "descriptor": {
                        "old_range": {
                            "start": 189,
                            "length": 6
                        },
                        "new_range": {
                            "start": 194,
                            "length": 10
                        },
                        "section": "class PShellCommand(object):"
                    },
                    "line_group": {
                        "all_lines": [
                            {
                                "content": "",
                                "type": "context"
                            },
                            {
                                "content": "            if factory is not None:",
                                "type": "context"
                            },
                            {
                                "content": "                shell = factory()",
                                "type": "context"
                            },
                            {
                                "content": "            else:",
                                "type": "added"
                            },
                            {
                                "content": "                raise ValueError(",
                                "type": "added"
                            },
                            {
                                "content": "                    'could not find a shell named \"%s\"' % user_shell",
                                "type": "added"
                            },
                            {
                                "content": "                )",
                                "type": "added"
                            },
                            {
                                "content": "",
                                "type": "context"
                            },
                            {
                                "content": "        if shell is None:",
                                "type": "context"
                            },
                            {
                                "content": "            shell = self.make_default_shell()",
                                "type": "context"
                            }
                        ]
                    },
                    "modified_entities": [
                        {
                            "file_name": "pyramid/scripts/pshell.py",
                            "type": "method",
                            "name": "PShellCommand.make_shell",
                            "content": "class PShellCommand(object):\n    usage = '%prog config_uri'\n    description = \"\"\"\\\n    Open an interactive shell with a Pyramid app loaded.  This command\n    accepts one positional argument named \"config_uri\" which specifies the\n    PasteDeploy config file to use for the interactive shell. The format is\n    \"inifile#name\". If the name is left off, the Pyramid default application\n    will be assumed.  Example: \"pshell myapp.ini#main\"\n\n    If you do not point the loader directly at the section of the ini file\n    containing your Pyramid application, the command will attempt to\n    find the app for you. If you are loading a pipeline that contains more\n    than one Pyramid application within it, the loader will use the\n    last one.\n    \"\"\"\n    bootstrap = (bootstrap,)  # for testing\n    pkg_resources = pkg_resources  # for testing\n\n    parser = optparse.OptionParser(\n        usage,\n        description=textwrap.dedent(description)\n        )\n    parser.add_option('-p', '--python-shell',\n                      action='store', type='string', dest='python_shell',\n                      default='', help='ipython | bpython | python')\n    parser.add_option('--setup',\n                      dest='setup',\n                      help=(\"A callable that will be passed the environment \"\n                            \"before it is made available to the shell. This \"\n                            \"option will override the 'setup' key in the \"\n                            \"[pshell] ini section.\"))\n\n    ConfigParser = configparser.ConfigParser # testing\n\n    loaded_objects = {}\n    object_help = {}\n    setup = None\n    pystartup = os.environ.get('PYTHONSTARTUP')\n\n    def __init__(self, argv, quiet=False):\n        self.quiet = quiet\n        self.options, self.args = self.parser.parse_args(argv[1:])\n\n    def pshell_file_config(self, filename):\n        config = self.ConfigParser()\n        config.read(filename)\n        try:\n            items = config.items('pshell')\n        except configparser.NoSectionError:\n            return\n\n        resolver = DottedNameResolver(None)\n        self.loaded_objects = {}\n        self.object_help = {}\n        self.setup = None\n        for k, v in items:\n            if k == 'setup':\n                self.setup = v\n            else:\n                self.loaded_objects[k] = resolver.maybe_resolve(v)\n                self.object_help[k] = v\n\n    def out(self, msg): # pragma: no cover\n        if not self.quiet:\n            print(msg)\n\n    def run(self, shell=None):\n        if not self.args:\n            self.out('Requires a config file argument')\n            return 2\n        config_uri = self.args[0]\n        config_file = config_uri.split('#', 1)[0]\n        setup_logging(config_file)\n        self.pshell_file_config(config_file)\n\n        # bootstrap the environ\n        env = self.bootstrap[0](config_uri, options=parse_vars(self.args[1:]))\n\n        # remove the closer from the env\n        self.closer = env.pop('closer')\n\n        # setup help text for default environment\n        env_help = dict(env)\n        env_help['app'] = 'The WSGI application.'\n        env_help['root'] = 'Root of the default resource tree.'\n        env_help['registry'] = 'Active Pyramid registry.'\n        env_help['request'] = 'Active request object.'\n        env_help['root_factory'] = (\n            'Default root factory used to create `root`.')\n\n        # override use_script with command-line options\n        if self.options.setup:\n            self.setup = self.options.setup\n\n        if self.setup:\n            # store the env before muddling it with the script\n            orig_env = env.copy()\n\n            # call the setup callable\n            resolver = DottedNameResolver(None)\n            setup = resolver.maybe_resolve(self.setup)\n            setup(env)\n\n            # remove any objects from default help that were overidden\n            for k, v in env.items():\n                if k not in orig_env or env[k] != orig_env[k]:\n                    env_help[k] = v\n\n        # load the pshell section of the ini file\n        env.update(self.loaded_objects)\n\n        # eliminate duplicates from env, allowing custom vars to override\n        for k in self.loaded_objects:\n            if k in env_help:\n                del env_help[k]\n\n        # generate help text\n        help = ''\n        if env_help:\n            help += 'Environment:'\n            for var in sorted(env_help.keys()):\n                help += '\\n  %-12s %s' % (var, env_help[var])\n\n        if self.object_help:\n            help += '\\n\\nCustom Variables:'\n            for var in sorted(self.object_help.keys()):\n                help += '\\n  %-12s %s' % (var, self.object_help[var])\n\n        if shell is None:\n            try:\n                shell = self.make_shell()\n            except ValueError as e:\n                self.out(str(e))\n                self.closer()\n                return 1\n\n        if self.pystartup and os.path.isfile(self.pystartup):\n            with open(self.pystartup, 'rb') as fp:\n                exec_(fp.read().decode('utf-8'), env)\n            if '__builtins__' in env:\n                del env['__builtins__']\n\n        try:\n            shell(env, help)\n        finally:\n            self.closer()\n\n    def make_shell(self):\n        shells = {}\n\n        priority_order = ['ipython', 'bpython', 'python']\n\n        for ep in self.pkg_resources.iter_entry_points('pyramid.pshell'):\n            name = ep.name\n            shell_module = ep.load()\n            shells[name] = shell_module\n\n        sorted_shells = sorted(\n            shells.items(), key=lambda x: priority_order.index(x[0])\n        )\n\n        shell = None\n        user_shell = self.options.python_shell.lower()\n\n        if not user_shell:\n            for name, factory in sorted_shells:\n                shell = factory()\n\n                if shell is not None:\n                    break\n        else:\n            factory = shells.get(user_shell)\n\n            if factory is not None:\n                shell = factory()\n            else:\n                raise ValueError(\n                    'could not find a shell named \"%s\"' % user_shell\n                )\n\n        if shell is None:\n            shell = self.make_default_shell()\n\n        return shell\n\n    def make_default_shell(self, interact=interact):\n        def shell(env, help):\n            cprt = 'Type \"help\" for more information.'\n            banner = \"Python %s on %s\\n%s\" % (sys.version, sys.platform, cprt)\n            banner += '\\n\\n' + help + '\\n'\n            interact(banner, local=env)\n        return shell\n\n    @classmethod\n    def make_bpython_shell(cls, BPShell=None):\n        if BPShell is None: # pragma: no cover\n            try:\n                from bpython import embed\n                BPShell = embed\n            except ImportError:\n                return None\n        def shell(env, help):\n            BPShell(locals_=env, banner=help + '\\n')\n        return shell\n\n    @classmethod\n    def make_ipython_shell(cls, IPShellFactory=None):\n        if IPShellFactory is None: # pragma: no cover\n            try:\n                from IPython.terminal.embed import (\n                    InteractiveShellEmbed)\n                IPShellFactory = InteractiveShellEmbed\n            except ImportError:\n                return None\n        def shell(env, help):\n            IPShell = IPShellFactory(banner2=help + '\\n', user_ns=env)\n            IPShell()\n        return shell",
                            "ast_type_str": "ClassDef",
                            "start_lineno": 169,
                            "end_lineno": 205,
                            "parent": {
                                "file_name": "pyramid/scripts/pshell.py",
                                "type": "class",
                                "name": "PShellCommand",
                                "content": "class PShellCommand(object):\n    usage = '%prog config_uri'\n    description = \"\"\"\\\n    Open an interactive shell with a Pyramid app loaded.  This command\n    accepts one positional argument named \"config_uri\" which specifies the\n    PasteDeploy config file to use for the interactive shell. The format is\n    \"inifile#name\". If the name is left off, the Pyramid default application\n    will be assumed.  Example: \"pshell myapp.ini#main\"\n\n    If you do not point the loader directly at the section of the ini file\n    containing your Pyramid application, the command will attempt to\n    find the app for you. If you are loading a pipeline that contains more\n    than one Pyramid application within it, the loader will use the\n    last one.\n    \"\"\"\n    bootstrap = (bootstrap,)  # for testing\n    pkg_resources = pkg_resources  # for testing\n\n    parser = optparse.OptionParser(\n        usage,\n        description=textwrap.dedent(description)\n        )\n    parser.add_option('-p', '--python-shell',\n                      action='store', type='string', dest='python_shell',\n                      default='', help='ipython | bpython | python')\n    parser.add_option('--setup',\n                      dest='setup',\n                      help=(\"A callable that will be passed the environment \"\n                            \"before it is made available to the shell. This \"\n                            \"option will override the 'setup' key in the \"\n                            \"[pshell] ini section.\"))\n\n    ConfigParser = configparser.ConfigParser # testing\n\n    loaded_objects = {}\n    object_help = {}\n    setup = None\n    pystartup = os.environ.get('PYTHONSTARTUP')\n\n    def __init__(self, argv, quiet=False):\n        self.quiet = quiet\n        self.options, self.args = self.parser.parse_args(argv[1:])\n\n    def pshell_file_config(self, filename):\n        config = self.ConfigParser()\n        config.read(filename)\n        try:\n            items = config.items('pshell')\n        except configparser.NoSectionError:\n            return\n\n        resolver = DottedNameResolver(None)\n        self.loaded_objects = {}\n        self.object_help = {}\n        self.setup = None\n        for k, v in items:\n            if k == 'setup':\n                self.setup = v\n            else:\n                self.loaded_objects[k] = resolver.maybe_resolve(v)\n                self.object_help[k] = v\n\n    def out(self, msg): # pragma: no cover\n        if not self.quiet:\n            print(msg)\n\n    def run(self, shell=None):\n        if not self.args:\n            self.out('Requires a config file argument')\n            return 2\n        config_uri = self.args[0]\n        config_file = config_uri.split('#', 1)[0]\n        setup_logging(config_file)\n        self.pshell_file_config(config_file)\n\n        # bootstrap the environ\n        env = self.bootstrap[0](config_uri, options=parse_vars(self.args[1:]))\n\n        # remove the closer from the env\n        self.closer = env.pop('closer')\n\n        # setup help text for default environment\n        env_help = dict(env)\n        env_help['app'] = 'The WSGI application.'\n        env_help['root'] = 'Root of the default resource tree.'\n        env_help['registry'] = 'Active Pyramid registry.'\n        env_help['request'] = 'Active request object.'\n        env_help['root_factory'] = (\n            'Default root factory used to create `root`.')\n\n        # override use_script with command-line options\n        if self.options.setup:\n            self.setup = self.options.setup\n\n        if self.setup:\n            # store the env before muddling it with the script\n            orig_env = env.copy()\n\n            # call the setup callable\n            resolver = DottedNameResolver(None)\n            setup = resolver.maybe_resolve(self.setup)\n            setup(env)\n\n            # remove any objects from default help that were overidden\n            for k, v in env.items():\n                if k not in orig_env or env[k] != orig_env[k]:\n                    env_help[k] = v\n\n        # load the pshell section of the ini file\n        env.update(self.loaded_objects)\n\n        # eliminate duplicates from env, allowing custom vars to override\n        for k in self.loaded_objects:\n            if k in env_help:\n                del env_help[k]\n\n        # generate help text\n        help = ''\n        if env_help:\n            help += 'Environment:'\n            for var in sorted(env_help.keys()):\n                help += '\\n  %-12s %s' % (var, env_help[var])\n\n        if self.object_help:\n            help += '\\n\\nCustom Variables:'\n            for var in sorted(self.object_help.keys()):\n                help += '\\n  %-12s %s' % (var, self.object_help[var])\n\n        if shell is None:\n            try:\n                shell = self.make_shell()\n            except ValueError as e:\n                self.out(str(e))\n                self.closer()\n                return 1\n\n        if self.pystartup and os.path.isfile(self.pystartup):\n            with open(self.pystartup, 'rb') as fp:\n                exec_(fp.read().decode('utf-8'), env)\n            if '__builtins__' in env:\n                del env['__builtins__']\n\n        try:\n            shell(env, help)\n        finally:\n            self.closer()\n\n    def make_shell(self):\n        shells = {}\n\n        priority_order = ['ipython', 'bpython', 'python']\n\n        for ep in self.pkg_resources.iter_entry_points('pyramid.pshell'):\n            name = ep.name\n            shell_module = ep.load()\n            shells[name] = shell_module\n\n        sorted_shells = sorted(\n            shells.items(), key=lambda x: priority_order.index(x[0])\n        )\n\n        shell = None\n        user_shell = self.options.python_shell.lower()\n\n        if not user_shell:\n            for name, factory in sorted_shells:\n                shell = factory()\n\n                if shell is not None:\n                    break\n        else:\n            factory = shells.get(user_shell)\n\n            if factory is not None:\n                shell = factory()\n            else:\n                raise ValueError(\n                    'could not find a shell named \"%s\"' % user_shell\n                )\n\n        if shell is None:\n            shell = self.make_default_shell()\n\n        return shell\n\n    def make_default_shell(self, interact=interact):\n        def shell(env, help):\n            cprt = 'Type \"help\" for more information.'\n            banner = \"Python %s on %s\\n%s\" % (sys.version, sys.platform, cprt)\n            banner += '\\n\\n' + help + '\\n'\n            interact(banner, local=env)\n        return shell\n\n    @classmethod\n    def make_bpython_shell(cls, BPShell=None):\n        if BPShell is None: # pragma: no cover\n            try:\n                from bpython import embed\n                BPShell = embed\n            except ImportError:\n                return None\n        def shell(env, help):\n            BPShell(locals_=env, banner=help + '\\n')\n        return shell\n\n    @classmethod\n    def make_ipython_shell(cls, IPShellFactory=None):\n        if IPShellFactory is None: # pragma: no cover\n            try:\n                from IPython.terminal.embed import (\n                    InteractiveShellEmbed)\n                IPShellFactory = InteractiveShellEmbed\n            except ImportError:\n                return None\n        def shell(env, help):\n            IPShell = IPShellFactory(banner2=help + '\\n', user_ns=env)\n            IPShell()\n        return shell",
                                "ast_type_str": "ClassDef",
                                "start_lineno": 22,
                                "end_lineno": 239,
                                "parent": null
                            }
                        },
                        {
                            "file_name": "pyramid/scripts/pshell.py",
                            "type": "class",
                            "name": "PShellCommand",
                            "content": "class PShellCommand(object):\n    usage = '%prog config_uri'\n    description = \"\"\"\\\n    Open an interactive shell with a Pyramid app loaded.  This command\n    accepts one positional argument named \"config_uri\" which specifies the\n    PasteDeploy config file to use for the interactive shell. The format is\n    \"inifile#name\". If the name is left off, the Pyramid default application\n    will be assumed.  Example: \"pshell myapp.ini#main\"\n\n    If you do not point the loader directly at the section of the ini file\n    containing your Pyramid application, the command will attempt to\n    find the app for you. If you are loading a pipeline that contains more\n    than one Pyramid application within it, the loader will use the\n    last one.\n    \"\"\"\n    bootstrap = (bootstrap,)  # for testing\n    pkg_resources = pkg_resources  # for testing\n\n    parser = optparse.OptionParser(\n        usage,\n        description=textwrap.dedent(description)\n        )\n    parser.add_option('-p', '--python-shell',\n                      action='store', type='string', dest='python_shell',\n                      default='', help='ipython | bpython | python')\n    parser.add_option('--setup',\n                      dest='setup',\n                      help=(\"A callable that will be passed the environment \"\n                            \"before it is made available to the shell. This \"\n                            \"option will override the 'setup' key in the \"\n                            \"[pshell] ini section.\"))\n\n    ConfigParser = configparser.ConfigParser # testing\n\n    loaded_objects = {}\n    object_help = {}\n    setup = None\n    pystartup = os.environ.get('PYTHONSTARTUP')\n\n    def __init__(self, argv, quiet=False):\n        self.quiet = quiet\n        self.options, self.args = self.parser.parse_args(argv[1:])\n\n    def pshell_file_config(self, filename):\n        config = self.ConfigParser()\n        config.read(filename)\n        try:\n            items = config.items('pshell')\n        except configparser.NoSectionError:\n            return\n\n        resolver = DottedNameResolver(None)\n        self.loaded_objects = {}\n        self.object_help = {}\n        self.setup = None\n        for k, v in items:\n            if k == 'setup':\n                self.setup = v\n            else:\n                self.loaded_objects[k] = resolver.maybe_resolve(v)\n                self.object_help[k] = v\n\n    def out(self, msg): # pragma: no cover\n        if not self.quiet:\n            print(msg)\n\n    def run(self, shell=None):\n        if not self.args:\n            self.out('Requires a config file argument')\n            return 2\n        config_uri = self.args[0]\n        config_file = config_uri.split('#', 1)[0]\n        setup_logging(config_file)\n        self.pshell_file_config(config_file)\n\n        # bootstrap the environ\n        env = self.bootstrap[0](config_uri, options=parse_vars(self.args[1:]))\n\n        # remove the closer from the env\n        self.closer = env.pop('closer')\n\n        # setup help text for default environment\n        env_help = dict(env)\n        env_help['app'] = 'The WSGI application.'\n        env_help['root'] = 'Root of the default resource tree.'\n        env_help['registry'] = 'Active Pyramid registry.'\n        env_help['request'] = 'Active request object.'\n        env_help['root_factory'] = (\n            'Default root factory used to create `root`.')\n\n        # override use_script with command-line options\n        if self.options.setup:\n            self.setup = self.options.setup\n\n        if self.setup:\n            # store the env before muddling it with the script\n            orig_env = env.copy()\n\n            # call the setup callable\n            resolver = DottedNameResolver(None)\n            setup = resolver.maybe_resolve(self.setup)\n            setup(env)\n\n            # remove any objects from default help that were overidden\n            for k, v in env.items():\n                if k not in orig_env or env[k] != orig_env[k]:\n                    env_help[k] = v\n\n        # load the pshell section of the ini file\n        env.update(self.loaded_objects)\n\n        # eliminate duplicates from env, allowing custom vars to override\n        for k in self.loaded_objects:\n            if k in env_help:\n                del env_help[k]\n\n        # generate help text\n        help = ''\n        if env_help:\n            help += 'Environment:'\n            for var in sorted(env_help.keys()):\n                help += '\\n  %-12s %s' % (var, env_help[var])\n\n        if self.object_help:\n            help += '\\n\\nCustom Variables:'\n            for var in sorted(self.object_help.keys()):\n                help += '\\n  %-12s %s' % (var, self.object_help[var])\n\n        if shell is None:\n            try:\n                shell = self.make_shell()\n            except ValueError as e:\n                self.out(str(e))\n                self.closer()\n                return 1\n\n        if self.pystartup and os.path.isfile(self.pystartup):\n            with open(self.pystartup, 'rb') as fp:\n                exec_(fp.read().decode('utf-8'), env)\n            if '__builtins__' in env:\n                del env['__builtins__']\n\n        try:\n            shell(env, help)\n        finally:\n            self.closer()\n\n    def make_shell(self):\n        shells = {}\n\n        priority_order = ['ipython', 'bpython', 'python']\n\n        for ep in self.pkg_resources.iter_entry_points('pyramid.pshell'):\n            name = ep.name\n            shell_module = ep.load()\n            shells[name] = shell_module\n\n        sorted_shells = sorted(\n            shells.items(), key=lambda x: priority_order.index(x[0])\n        )\n\n        shell = None\n        user_shell = self.options.python_shell.lower()\n\n        if not user_shell:\n            for name, factory in sorted_shells:\n                shell = factory()\n\n                if shell is not None:\n                    break\n        else:\n            factory = shells.get(user_shell)\n\n            if factory is not None:\n                shell = factory()\n            else:\n                raise ValueError(\n                    'could not find a shell named \"%s\"' % user_shell\n                )\n\n        if shell is None:\n            shell = self.make_default_shell()\n\n        return shell\n\n    def make_default_shell(self, interact=interact):\n        def shell(env, help):\n            cprt = 'Type \"help\" for more information.'\n            banner = \"Python %s on %s\\n%s\" % (sys.version, sys.platform, cprt)\n            banner += '\\n\\n' + help + '\\n'\n            interact(banner, local=env)\n        return shell\n\n    @classmethod\n    def make_bpython_shell(cls, BPShell=None):\n        if BPShell is None: # pragma: no cover\n            try:\n                from bpython import embed\n                BPShell = embed\n            except ImportError:\n                return None\n        def shell(env, help):\n            BPShell(locals_=env, banner=help + '\\n')\n        return shell\n\n    @classmethod\n    def make_ipython_shell(cls, IPShellFactory=None):\n        if IPShellFactory is None: # pragma: no cover\n            try:\n                from IPython.terminal.embed import (\n                    InteractiveShellEmbed)\n                IPShellFactory = InteractiveShellEmbed\n            except ImportError:\n                return None\n        def shell(env, help):\n            IPShell = IPShellFactory(banner2=help + '\\n', user_ns=env)\n            IPShell()\n        return shell",
                            "ast_type_str": "ClassDef",
                            "start_lineno": 22,
                            "end_lineno": 239,
                            "parent": null
                        }
                    ],
                    "added_entities": [],
                    "deleted_entities": []
                }
            ]
        },
        {
            "old_file_content": "import os\nimport unittest\nfrom pyramid.tests.test_scripts import dummy\n\n\nclass TestPShellCommand(unittest.TestCase):\n    def _getTargetClass(self):\n        from pyramid.scripts.pshell import PShellCommand\n        return PShellCommand\n\n    def _makeOne(self, patch_bootstrap=True, patch_config=True,\n                 patch_args=True, patch_options=True):\n        cmd = self._getTargetClass()([])\n\n        if patch_bootstrap:\n            self.bootstrap = dummy.DummyBootstrap()\n            cmd.bootstrap = (self.bootstrap,)\n        if patch_config:\n            self.config_factory = dummy.DummyConfigParserFactory()\n            cmd.ConfigParser = self.config_factory\n        if patch_args:\n            self.args = ('/foo/bar/myapp.ini#myapp',)\n            cmd.args = self.args\n        if patch_options:\n            class Options(object): pass\n            self.options = Options()\n            self.options.python_shell = ''\n            self.options.setup = None\n            cmd.options = self.options\n\n        # default to None to prevent side-effects from running tests in\n        # unknown environments\n        cmd.pystartup = None\n        return cmd\n\n    def _makeEntryPoints(self, command, shells):\n        command.pkg_resources = dummy.DummyPkgResources(shells)\n\n    def test_make_default_shell(self):\n        command = self._makeOne()\n        interact = dummy.DummyInteractor()\n        shell = command.make_default_shell(interact)\n        shell({'foo': 'bar'}, 'a help message')\n        self.assertEqual(interact.local, {'foo': 'bar'})\n        self.assertTrue('a help message' in interact.banner)\n\n    def test_make_bpython_shell(self):\n        command = self._makeOne()\n        bpython = dummy.DummyBPythonShell()\n        shell = command.make_bpython_shell(bpython)\n        shell({'foo': 'bar'}, 'a help message')\n        self.assertEqual(bpython.locals_, {'foo': 'bar'})\n        self.assertTrue('a help message' in bpython.banner)\n\n    def test_make_ipython_v1_1_shell(self):\n        command = self._makeOne()\n        ipshell_factory = dummy.DummyIPShellFactory()\n        shell = command.make_ipython_shell(ipshell_factory)\n        shell({'foo': 'bar'}, 'a help message')\n        self.assertEqual(ipshell_factory.kw['user_ns'], {'foo': 'bar'})\n        self.assertTrue('a help message' in ipshell_factory.kw['banner2'])\n        self.assertTrue(ipshell_factory.shell.called)\n\n    def test_command_loads_default_shell(self):\n        command = self._makeOne()\n        shell = dummy.DummyShell()\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: None,\n                'bpython': lambda: None,\n            }\n        )\n\n        command.make_default_shell = lambda: shell\n        command.run()\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_default_shell_with_unknown_shell(self):\n        command = self._makeOne()\n        shell = dummy.DummyShell()\n        bad_shell = dummy.DummyShell()\n\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: bad_shell,\n                'bpython': lambda: bad_shell,\n            }\n        )\n\n        command.make_default_shell = lambda: shell\n        command.options.python_shell = 'unknow_python_shell'\n        command.run()\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n        })\n        self.assertEqual(bad_shell.env, {})\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_ipython_v1_1(self):\n        command = self._makeOne()\n        shell = dummy.DummyShell()\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: shell,\n                'bpython': lambda: bad_shell,\n            }\n        )\n\n        command.options.python_shell = 'ipython'\n\n        command.run()\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_bpython_shell(self):\n        command = self._makeOne()\n        shell = dummy.DummyBPythonShell()\n\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: None,\n                'bpython': lambda: shell,\n            }\n        )\n\n        command.options.python_shell = 'bpython'\n        command.run()\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.locals_, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.banner)\n\n    def test_shell_entry_points(self):\n        command = self._makeOne()\n        dshell = dummy.DummyShell()\n\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: dshell,\n                'bpython': lambda: dhell,\n            }\n        )\n\n        command.make_default_shell = lambda: None\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n\n    def test_shell_ordering(self):\n        command = self._makeOne()\n        ipshell = dummy.DummyShell()\n        bpshell = dummy.DummyShell()\n        dshell = dummy.DummyShell()\n\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: None,\n                'bpython': lambda: None,\n            }\n        )\n\n        command.make_default_shell = lambda: dshell\n\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n\n        command.options.python_shell = 'ipython'\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n\n        command.options.python_shell = 'bpython'\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: ipshell,\n                'bpython': lambda: bpshell,\n            }\n        )\n\n        command.options.python_shell = 'ipython'\n        shell = command.make_shell()\n        self.assertEqual(shell, ipshell)\n\n        command.options.python_shell = 'bpython'\n        shell = command.make_shell()\n        self.assertEqual(shell, bpshell)\n\n        command.options.python_shell = 'python'\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n\n    def test_command_loads_custom_items(self):\n        command = self._makeOne()\n        model = dummy.Dummy()\n        self.config_factory.items = [('m', model)]\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n            'm':model,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_setup(self):\n        command = self._makeOne()\n        def setup(env):\n            env['a'] = 1\n            env['root'] = 'root override'\n        self.config_factory.items = [('setup', setup)]\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':'root override',\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n            'a':1,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_check_variable_override_order(self):\n        command = self._makeOne()\n        model = dummy.Dummy()\n        def setup(env):\n            env['a'] = 1\n            env['m'] = 'model override'\n            env['root'] = 'root override'\n        self.config_factory.items = [('setup', setup), ('m', model)]\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':'root override',\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n            'a':1, 'm':model,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_setup_from_options(self):\n        command = self._makeOne()\n        def setup(env):\n            env['a'] = 1\n            env['root'] = 'root override'\n        model = dummy.Dummy()\n        self.config_factory.items = [('setup', 'abc'),\n                                     ('m', model)]\n        command.options.setup = setup\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':'root override',\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n            'a':1, 'm':model,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_custom_section_override(self):\n        command = self._makeOne()\n        dummy_ = dummy.Dummy()\n        self.config_factory.items = [('app', dummy_), ('root', dummy_),\n                                     ('registry', dummy_), ('request', dummy_)]\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':dummy_, 'root':dummy_, 'registry':dummy_, 'request':dummy_,\n            'root_factory':self.bootstrap.root_factory,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_pythonstartup(self):\n        command = self._makeOne()\n        command.pystartup = (\n            os.path.abspath(\n                os.path.join(\n                    os.path.dirname(__file__),\n                    'pystartup.txt')))\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n            'foo':1,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\nclass Test_main(unittest.TestCase):\n    def _callFUT(self, argv):\n        from pyramid.scripts.pshell import main\n        return main(argv, quiet=True)\n\n    def test_it(self):\n        result = self._callFUT(['pshell'])\n        self.assertEqual(result, 2)\n\n",
            "new_file_content": "import os\nimport unittest\nfrom pyramid.tests.test_scripts import dummy\n\n\nclass TestPShellCommand(unittest.TestCase):\n    def _getTargetClass(self):\n        from pyramid.scripts.pshell import PShellCommand\n        return PShellCommand\n\n    def _makeOne(self, patch_bootstrap=True, patch_config=True,\n                 patch_args=True, patch_options=True):\n        cmd = self._getTargetClass()([])\n\n        if patch_bootstrap:\n            self.bootstrap = dummy.DummyBootstrap()\n            cmd.bootstrap = (self.bootstrap,)\n        if patch_config:\n            self.config_factory = dummy.DummyConfigParserFactory()\n            cmd.ConfigParser = self.config_factory\n        if patch_args:\n            self.args = ('/foo/bar/myapp.ini#myapp',)\n            cmd.args = self.args\n        if patch_options:\n            class Options(object): pass\n            self.options = Options()\n            self.options.python_shell = ''\n            self.options.setup = None\n            cmd.options = self.options\n\n        # default to None to prevent side-effects from running tests in\n        # unknown environments\n        cmd.pystartup = None\n        return cmd\n\n    def _makeEntryPoints(self, command, shells):\n        command.pkg_resources = dummy.DummyPkgResources(shells)\n\n    def test_make_default_shell(self):\n        command = self._makeOne()\n        interact = dummy.DummyInteractor()\n        shell = command.make_default_shell(interact)\n        shell({'foo': 'bar'}, 'a help message')\n        self.assertEqual(interact.local, {'foo': 'bar'})\n        self.assertTrue('a help message' in interact.banner)\n\n    def test_make_bpython_shell(self):\n        command = self._makeOne()\n        bpython = dummy.DummyBPythonShell()\n        shell = command.make_bpython_shell(bpython)\n        shell({'foo': 'bar'}, 'a help message')\n        self.assertEqual(bpython.locals_, {'foo': 'bar'})\n        self.assertTrue('a help message' in bpython.banner)\n\n    def test_make_ipython_v1_1_shell(self):\n        command = self._makeOne()\n        ipshell_factory = dummy.DummyIPShellFactory()\n        shell = command.make_ipython_shell(ipshell_factory)\n        shell({'foo': 'bar'}, 'a help message')\n        self.assertEqual(ipshell_factory.kw['user_ns'], {'foo': 'bar'})\n        self.assertTrue('a help message' in ipshell_factory.kw['banner2'])\n        self.assertTrue(ipshell_factory.shell.called)\n\n    def test_command_loads_default_shell(self):\n        command = self._makeOne()\n        shell = dummy.DummyShell()\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: None,\n                'bpython': lambda: None,\n            }\n        )\n\n        command.make_default_shell = lambda: shell\n        command.run()\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_default_shell_with_unknown_shell(self):\n        command = self._makeOne()\n        out_calls = []\n\n        def out(msg):\n            out_calls.append(msg)\n\n        command.out = out\n\n        shell = dummy.DummyShell()\n        bad_shell = dummy.DummyShell()\n\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: bad_shell,\n                'bpython': lambda: bad_shell,\n            }\n        )\n\n        command.make_default_shell = lambda: shell\n        command.options.python_shell = 'unknown_python_shell'\n        result = command.run()\n        self.assertEqual(result, 1)\n        self.assertEqual(\n            out_calls, ['could not find a shell named \"unknown_python_shell\"']\n        )\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertTrue(self.bootstrap.closer.called)\n\n    def test_command_loads_ipython_v1_1(self):\n        command = self._makeOne()\n        shell = dummy.DummyShell()\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: shell,\n                'bpython': lambda: bad_shell,\n            }\n        )\n\n        command.options.python_shell = 'ipython'\n\n        command.run()\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_bpython_shell(self):\n        command = self._makeOne()\n        shell = dummy.DummyBPythonShell()\n\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: None,\n                'bpython': lambda: shell,\n            }\n        )\n\n        command.options.python_shell = 'bpython'\n        command.run()\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.locals_, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.banner)\n\n    def test_shell_entry_points(self):\n        command = self._makeOne()\n        dshell = dummy.DummyShell()\n\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: dshell,\n                'bpython': lambda: dhell,\n            }\n        )\n\n        command.make_default_shell = lambda: None\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n\n    def test_shell_ordering(self):\n        command = self._makeOne()\n        ipshell = dummy.DummyShell()\n        bpshell = dummy.DummyShell()\n        dshell = dummy.DummyShell()\n\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: None,\n                'bpython': lambda: None,\n            }\n        )\n\n        command.make_default_shell = lambda: dshell\n\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n\n        command.options.python_shell = 'ipython'\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n\n        command.options.python_shell = 'bpython'\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: ipshell,\n                'bpython': lambda: bpshell,\n                'python': lambda: dshell,\n            }\n        )\n\n        command.options.python_shell = 'ipython'\n        shell = command.make_shell()\n        self.assertEqual(shell, ipshell)\n\n        command.options.python_shell = 'bpython'\n        shell = command.make_shell()\n        self.assertEqual(shell, bpshell)\n\n        command.options.python_shell = 'python'\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n\n    def test_command_loads_custom_items(self):\n        command = self._makeOne()\n        model = dummy.Dummy()\n        self.config_factory.items = [('m', model)]\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n            'm':model,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_setup(self):\n        command = self._makeOne()\n        def setup(env):\n            env['a'] = 1\n            env['root'] = 'root override'\n        self.config_factory.items = [('setup', setup)]\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':'root override',\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n            'a':1,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_check_variable_override_order(self):\n        command = self._makeOne()\n        model = dummy.Dummy()\n        def setup(env):\n            env['a'] = 1\n            env['m'] = 'model override'\n            env['root'] = 'root override'\n        self.config_factory.items = [('setup', setup), ('m', model)]\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':'root override',\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n            'a':1, 'm':model,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_setup_from_options(self):\n        command = self._makeOne()\n        def setup(env):\n            env['a'] = 1\n            env['root'] = 'root override'\n        model = dummy.Dummy()\n        self.config_factory.items = [('setup', 'abc'),\n                                     ('m', model)]\n        command.options.setup = setup\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':'root override',\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n            'a':1, 'm':model,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_custom_section_override(self):\n        command = self._makeOne()\n        dummy_ = dummy.Dummy()\n        self.config_factory.items = [('app', dummy_), ('root', dummy_),\n                                     ('registry', dummy_), ('request', dummy_)]\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':dummy_, 'root':dummy_, 'registry':dummy_, 'request':dummy_,\n            'root_factory':self.bootstrap.root_factory,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_pythonstartup(self):\n        command = self._makeOne()\n        command.pystartup = (\n            os.path.abspath(\n                os.path.join(\n                    os.path.dirname(__file__),\n                    'pystartup.txt')))\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n            'foo':1,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\nclass Test_main(unittest.TestCase):\n    def _callFUT(self, argv):\n        from pyramid.scripts.pshell import main\n        return main(argv, quiet=True)\n\n    def test_it(self):\n        result = self._callFUT(['pshell'])\n        self.assertEqual(result, 2)\n\n",
            "header": {
                "file": {
                    "path": "pyramid/tests/test_scripts/test_pshell.py"
                },
                "misc_line": null
            },
            "index_line": {
                "old_commit_hash": "b5c2775d6",
                "new_commit_hash": "985a3010e",
                "mode": "100644"
            },
            "is_binary_file": false,
            "binary_line": null,
            "minus_file": {
                "path": "a/pyramid/tests/test_scripts/test_pshell.py"
            },
            "plus_file": {
                "path": "b/pyramid/tests/test_scripts/test_pshell.py"
            },
            "hunks": [
                {
                    "descriptor": {
                        "old_range": {
                            "start": 89,
                            "length": 6
                        },
                        "new_range": {
                            "start": 89,
                            "length": 13
                        },
                        "section": "class TestPShellCommand(unittest.TestCase):"
                    },
                    "line_group": {
                        "all_lines": [
                            {
                                "content": "",
                                "type": "context"
                            },
                            {
                                "content": "    def test_command_loads_default_shell_with_unknown_shell(self):",
                                "type": "context"
                            },
                            {
                                "content": "        command = self._makeOne()",
                                "type": "context"
                            },
                            {
                                "content": "        out_calls = []",
                                "type": "added"
                            },
                            {
                                "content": "",
                                "type": "added"
                            },
                            {
                                "content": "        def out(msg):",
                                "type": "added"
                            },
                            {
                                "content": "            out_calls.append(msg)",
                                "type": "added"
                            },
                            {
                                "content": "",
                                "type": "added"
                            },
                            {
                                "content": "        command.out = out",
                                "type": "added"
                            },
                            {
                                "content": "",
                                "type": "added"
                            },
                            {
                                "content": "        shell = dummy.DummyShell()",
                                "type": "context"
                            },
                            {
                                "content": "        bad_shell = dummy.DummyShell()",
                                "type": "context"
                            },
                            {
                                "content": "",
                                "type": "context"
                            }
                        ]
                    },
                    "modified_entities": [
                        {
                            "file_name": "pyramid/tests/test_scripts/test_pshell.py",
                            "type": "class",
                            "name": "TestPShellCommand",
                            "content": "class TestPShellCommand(unittest.TestCase):\n    def _getTargetClass(self):\n        from pyramid.scripts.pshell import PShellCommand\n        return PShellCommand\n\n    def _makeOne(self, patch_bootstrap=True, patch_config=True,\n                 patch_args=True, patch_options=True):\n        cmd = self._getTargetClass()([])\n\n        if patch_bootstrap:\n            self.bootstrap = dummy.DummyBootstrap()\n            cmd.bootstrap = (self.bootstrap,)\n        if patch_config:\n            self.config_factory = dummy.DummyConfigParserFactory()\n            cmd.ConfigParser = self.config_factory\n        if patch_args:\n            self.args = ('/foo/bar/myapp.ini#myapp',)\n            cmd.args = self.args\n        if patch_options:\n            class Options(object): pass\n            self.options = Options()\n            self.options.python_shell = ''\n            self.options.setup = None\n            cmd.options = self.options\n\n        # default to None to prevent side-effects from running tests in\n        # unknown environments\n        cmd.pystartup = None\n        return cmd\n\n    def _makeEntryPoints(self, command, shells):\n        command.pkg_resources = dummy.DummyPkgResources(shells)\n\n    def test_make_default_shell(self):\n        command = self._makeOne()\n        interact = dummy.DummyInteractor()\n        shell = command.make_default_shell(interact)\n        shell({'foo': 'bar'}, 'a help message')\n        self.assertEqual(interact.local, {'foo': 'bar'})\n        self.assertTrue('a help message' in interact.banner)\n\n    def test_make_bpython_shell(self):\n        command = self._makeOne()\n        bpython = dummy.DummyBPythonShell()\n        shell = command.make_bpython_shell(bpython)\n        shell({'foo': 'bar'}, 'a help message')\n        self.assertEqual(bpython.locals_, {'foo': 'bar'})\n        self.assertTrue('a help message' in bpython.banner)\n\n    def test_make_ipython_v1_1_shell(self):\n        command = self._makeOne()\n        ipshell_factory = dummy.DummyIPShellFactory()\n        shell = command.make_ipython_shell(ipshell_factory)\n        shell({'foo': 'bar'}, 'a help message')\n        self.assertEqual(ipshell_factory.kw['user_ns'], {'foo': 'bar'})\n        self.assertTrue('a help message' in ipshell_factory.kw['banner2'])\n        self.assertTrue(ipshell_factory.shell.called)\n\n    def test_command_loads_default_shell(self):\n        command = self._makeOne()\n        shell = dummy.DummyShell()\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: None,\n                'bpython': lambda: None,\n            }\n        )\n\n        command.make_default_shell = lambda: shell\n        command.run()\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_default_shell_with_unknown_shell(self):\n        command = self._makeOne()\n        out_calls = []\n\n        def out(msg):\n            out_calls.append(msg)\n\n        command.out = out\n\n        shell = dummy.DummyShell()\n        bad_shell = dummy.DummyShell()\n\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: bad_shell,\n                'bpython': lambda: bad_shell,\n            }\n        )\n\n        command.make_default_shell = lambda: shell\n        command.options.python_shell = 'unknown_python_shell'\n        result = command.run()\n        self.assertEqual(result, 1)\n        self.assertEqual(\n            out_calls, ['could not find a shell named \"unknown_python_shell\"']\n        )\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertTrue(self.bootstrap.closer.called)\n\n    def test_command_loads_ipython_v1_1(self):\n        command = self._makeOne()\n        shell = dummy.DummyShell()\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: shell,\n                'bpython': lambda: bad_shell,\n            }\n        )\n\n        command.options.python_shell = 'ipython'\n\n        command.run()\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_bpython_shell(self):\n        command = self._makeOne()\n        shell = dummy.DummyBPythonShell()\n\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: None,\n                'bpython': lambda: shell,\n            }\n        )\n\n        command.options.python_shell = 'bpython'\n        command.run()\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.locals_, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.banner)\n\n    def test_shell_entry_points(self):\n        command = self._makeOne()\n        dshell = dummy.DummyShell()\n\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: dshell,\n                'bpython': lambda: dhell,\n            }\n        )\n\n        command.make_default_shell = lambda: None\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n\n    def test_shell_ordering(self):\n        command = self._makeOne()\n        ipshell = dummy.DummyShell()\n        bpshell = dummy.DummyShell()\n        dshell = dummy.DummyShell()\n\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: None,\n                'bpython': lambda: None,\n            }\n        )\n\n        command.make_default_shell = lambda: dshell\n\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n\n        command.options.python_shell = 'ipython'\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n\n        command.options.python_shell = 'bpython'\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: ipshell,\n                'bpython': lambda: bpshell,\n                'python': lambda: dshell,\n            }\n        )\n\n        command.options.python_shell = 'ipython'\n        shell = command.make_shell()\n        self.assertEqual(shell, ipshell)\n\n        command.options.python_shell = 'bpython'\n        shell = command.make_shell()\n        self.assertEqual(shell, bpshell)\n\n        command.options.python_shell = 'python'\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n\n    def test_command_loads_custom_items(self):\n        command = self._makeOne()\n        model = dummy.Dummy()\n        self.config_factory.items = [('m', model)]\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n            'm':model,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_setup(self):\n        command = self._makeOne()\n        def setup(env):\n            env['a'] = 1\n            env['root'] = 'root override'\n        self.config_factory.items = [('setup', setup)]\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':'root override',\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n            'a':1,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_check_variable_override_order(self):\n        command = self._makeOne()\n        model = dummy.Dummy()\n        def setup(env):\n            env['a'] = 1\n            env['m'] = 'model override'\n            env['root'] = 'root override'\n        self.config_factory.items = [('setup', setup), ('m', model)]\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':'root override',\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n            'a':1, 'm':model,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_setup_from_options(self):\n        command = self._makeOne()\n        def setup(env):\n            env['a'] = 1\n            env['root'] = 'root override'\n        model = dummy.Dummy()\n        self.config_factory.items = [('setup', 'abc'),\n                                     ('m', model)]\n        command.options.setup = setup\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':'root override',\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n            'a':1, 'm':model,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_custom_section_override(self):\n        command = self._makeOne()\n        dummy_ = dummy.Dummy()\n        self.config_factory.items = [('app', dummy_), ('root', dummy_),\n                                     ('registry', dummy_), ('request', dummy_)]\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':dummy_, 'root':dummy_, 'registry':dummy_, 'request':dummy_,\n            'root_factory':self.bootstrap.root_factory,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_pythonstartup(self):\n        command = self._makeOne()\n        command.pystartup = (\n            os.path.abspath(\n                os.path.join(\n                    os.path.dirname(__file__),\n                    'pystartup.txt')))\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n            'foo':1,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)",
                            "ast_type_str": "ClassDef",
                            "start_lineno": 6,
                            "end_lineno": 368,
                            "parent": null
                        },
                        {
                            "file_name": "pyramid/tests/test_scripts/test_pshell.py",
                            "type": "method",
                            "name": "TestPShellCommand.test_command_loads_default_shell_with_unknown_shell",
                            "content": "class TestPShellCommand(unittest.TestCase):\n    def _getTargetClass(self):\n        from pyramid.scripts.pshell import PShellCommand\n        return PShellCommand\n\n    def _makeOne(self, patch_bootstrap=True, patch_config=True,\n                 patch_args=True, patch_options=True):\n        cmd = self._getTargetClass()([])\n\n        if patch_bootstrap:\n            self.bootstrap = dummy.DummyBootstrap()\n            cmd.bootstrap = (self.bootstrap,)\n        if patch_config:\n            self.config_factory = dummy.DummyConfigParserFactory()\n            cmd.ConfigParser = self.config_factory\n        if patch_args:\n            self.args = ('/foo/bar/myapp.ini#myapp',)\n            cmd.args = self.args\n        if patch_options:\n            class Options(object): pass\n            self.options = Options()\n            self.options.python_shell = ''\n            self.options.setup = None\n            cmd.options = self.options\n\n        # default to None to prevent side-effects from running tests in\n        # unknown environments\n        cmd.pystartup = None\n        return cmd\n\n    def _makeEntryPoints(self, command, shells):\n        command.pkg_resources = dummy.DummyPkgResources(shells)\n\n    def test_make_default_shell(self):\n        command = self._makeOne()\n        interact = dummy.DummyInteractor()\n        shell = command.make_default_shell(interact)\n        shell({'foo': 'bar'}, 'a help message')\n        self.assertEqual(interact.local, {'foo': 'bar'})\n        self.assertTrue('a help message' in interact.banner)\n\n    def test_make_bpython_shell(self):\n        command = self._makeOne()\n        bpython = dummy.DummyBPythonShell()\n        shell = command.make_bpython_shell(bpython)\n        shell({'foo': 'bar'}, 'a help message')\n        self.assertEqual(bpython.locals_, {'foo': 'bar'})\n        self.assertTrue('a help message' in bpython.banner)\n\n    def test_make_ipython_v1_1_shell(self):\n        command = self._makeOne()\n        ipshell_factory = dummy.DummyIPShellFactory()\n        shell = command.make_ipython_shell(ipshell_factory)\n        shell({'foo': 'bar'}, 'a help message')\n        self.assertEqual(ipshell_factory.kw['user_ns'], {'foo': 'bar'})\n        self.assertTrue('a help message' in ipshell_factory.kw['banner2'])\n        self.assertTrue(ipshell_factory.shell.called)\n\n    def test_command_loads_default_shell(self):\n        command = self._makeOne()\n        shell = dummy.DummyShell()\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: None,\n                'bpython': lambda: None,\n            }\n        )\n\n        command.make_default_shell = lambda: shell\n        command.run()\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_default_shell_with_unknown_shell(self):\n        command = self._makeOne()\n        out_calls = []\n\n        def out(msg):\n            out_calls.append(msg)\n\n        command.out = out\n\n        shell = dummy.DummyShell()\n        bad_shell = dummy.DummyShell()\n\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: bad_shell,\n                'bpython': lambda: bad_shell,\n            }\n        )\n\n        command.make_default_shell = lambda: shell\n        command.options.python_shell = 'unknown_python_shell'\n        result = command.run()\n        self.assertEqual(result, 1)\n        self.assertEqual(\n            out_calls, ['could not find a shell named \"unknown_python_shell\"']\n        )\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertTrue(self.bootstrap.closer.called)\n\n    def test_command_loads_ipython_v1_1(self):\n        command = self._makeOne()\n        shell = dummy.DummyShell()\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: shell,\n                'bpython': lambda: bad_shell,\n            }\n        )\n\n        command.options.python_shell = 'ipython'\n\n        command.run()\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_bpython_shell(self):\n        command = self._makeOne()\n        shell = dummy.DummyBPythonShell()\n\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: None,\n                'bpython': lambda: shell,\n            }\n        )\n\n        command.options.python_shell = 'bpython'\n        command.run()\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.locals_, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.banner)\n\n    def test_shell_entry_points(self):\n        command = self._makeOne()\n        dshell = dummy.DummyShell()\n\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: dshell,\n                'bpython': lambda: dhell,\n            }\n        )\n\n        command.make_default_shell = lambda: None\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n\n    def test_shell_ordering(self):\n        command = self._makeOne()\n        ipshell = dummy.DummyShell()\n        bpshell = dummy.DummyShell()\n        dshell = dummy.DummyShell()\n\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: None,\n                'bpython': lambda: None,\n            }\n        )\n\n        command.make_default_shell = lambda: dshell\n\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n\n        command.options.python_shell = 'ipython'\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n\n        command.options.python_shell = 'bpython'\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: ipshell,\n                'bpython': lambda: bpshell,\n                'python': lambda: dshell,\n            }\n        )\n\n        command.options.python_shell = 'ipython'\n        shell = command.make_shell()\n        self.assertEqual(shell, ipshell)\n\n        command.options.python_shell = 'bpython'\n        shell = command.make_shell()\n        self.assertEqual(shell, bpshell)\n\n        command.options.python_shell = 'python'\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n\n    def test_command_loads_custom_items(self):\n        command = self._makeOne()\n        model = dummy.Dummy()\n        self.config_factory.items = [('m', model)]\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n            'm':model,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_setup(self):\n        command = self._makeOne()\n        def setup(env):\n            env['a'] = 1\n            env['root'] = 'root override'\n        self.config_factory.items = [('setup', setup)]\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':'root override',\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n            'a':1,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_check_variable_override_order(self):\n        command = self._makeOne()\n        model = dummy.Dummy()\n        def setup(env):\n            env['a'] = 1\n            env['m'] = 'model override'\n            env['root'] = 'root override'\n        self.config_factory.items = [('setup', setup), ('m', model)]\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':'root override',\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n            'a':1, 'm':model,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_setup_from_options(self):\n        command = self._makeOne()\n        def setup(env):\n            env['a'] = 1\n            env['root'] = 'root override'\n        model = dummy.Dummy()\n        self.config_factory.items = [('setup', 'abc'),\n                                     ('m', model)]\n        command.options.setup = setup\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':'root override',\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n            'a':1, 'm':model,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_custom_section_override(self):\n        command = self._makeOne()\n        dummy_ = dummy.Dummy()\n        self.config_factory.items = [('app', dummy_), ('root', dummy_),\n                                     ('registry', dummy_), ('request', dummy_)]\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':dummy_, 'root':dummy_, 'registry':dummy_, 'request':dummy_,\n            'root_factory':self.bootstrap.root_factory,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_pythonstartup(self):\n        command = self._makeOne()\n        command.pystartup = (\n            os.path.abspath(\n                os.path.join(\n                    os.path.dirname(__file__),\n                    'pystartup.txt')))\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n            'foo':1,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)",
                            "ast_type_str": "ClassDef",
                            "start_lineno": 90,
                            "end_lineno": 121,
                            "parent": {
                                "file_name": "pyramid/tests/test_scripts/test_pshell.py",
                                "type": "class",
                                "name": "TestPShellCommand",
                                "content": "class TestPShellCommand(unittest.TestCase):\n    def _getTargetClass(self):\n        from pyramid.scripts.pshell import PShellCommand\n        return PShellCommand\n\n    def _makeOne(self, patch_bootstrap=True, patch_config=True,\n                 patch_args=True, patch_options=True):\n        cmd = self._getTargetClass()([])\n\n        if patch_bootstrap:\n            self.bootstrap = dummy.DummyBootstrap()\n            cmd.bootstrap = (self.bootstrap,)\n        if patch_config:\n            self.config_factory = dummy.DummyConfigParserFactory()\n            cmd.ConfigParser = self.config_factory\n        if patch_args:\n            self.args = ('/foo/bar/myapp.ini#myapp',)\n            cmd.args = self.args\n        if patch_options:\n            class Options(object): pass\n            self.options = Options()\n            self.options.python_shell = ''\n            self.options.setup = None\n            cmd.options = self.options\n\n        # default to None to prevent side-effects from running tests in\n        # unknown environments\n        cmd.pystartup = None\n        return cmd\n\n    def _makeEntryPoints(self, command, shells):\n        command.pkg_resources = dummy.DummyPkgResources(shells)\n\n    def test_make_default_shell(self):\n        command = self._makeOne()\n        interact = dummy.DummyInteractor()\n        shell = command.make_default_shell(interact)\n        shell({'foo': 'bar'}, 'a help message')\n        self.assertEqual(interact.local, {'foo': 'bar'})\n        self.assertTrue('a help message' in interact.banner)\n\n    def test_make_bpython_shell(self):\n        command = self._makeOne()\n        bpython = dummy.DummyBPythonShell()\n        shell = command.make_bpython_shell(bpython)\n        shell({'foo': 'bar'}, 'a help message')\n        self.assertEqual(bpython.locals_, {'foo': 'bar'})\n        self.assertTrue('a help message' in bpython.banner)\n\n    def test_make_ipython_v1_1_shell(self):\n        command = self._makeOne()\n        ipshell_factory = dummy.DummyIPShellFactory()\n        shell = command.make_ipython_shell(ipshell_factory)\n        shell({'foo': 'bar'}, 'a help message')\n        self.assertEqual(ipshell_factory.kw['user_ns'], {'foo': 'bar'})\n        self.assertTrue('a help message' in ipshell_factory.kw['banner2'])\n        self.assertTrue(ipshell_factory.shell.called)\n\n    def test_command_loads_default_shell(self):\n        command = self._makeOne()\n        shell = dummy.DummyShell()\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: None,\n                'bpython': lambda: None,\n            }\n        )\n\n        command.make_default_shell = lambda: shell\n        command.run()\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_default_shell_with_unknown_shell(self):\n        command = self._makeOne()\n        out_calls = []\n\n        def out(msg):\n            out_calls.append(msg)\n\n        command.out = out\n\n        shell = dummy.DummyShell()\n        bad_shell = dummy.DummyShell()\n\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: bad_shell,\n                'bpython': lambda: bad_shell,\n            }\n        )\n\n        command.make_default_shell = lambda: shell\n        command.options.python_shell = 'unknown_python_shell'\n        result = command.run()\n        self.assertEqual(result, 1)\n        self.assertEqual(\n            out_calls, ['could not find a shell named \"unknown_python_shell\"']\n        )\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertTrue(self.bootstrap.closer.called)\n\n    def test_command_loads_ipython_v1_1(self):\n        command = self._makeOne()\n        shell = dummy.DummyShell()\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: shell,\n                'bpython': lambda: bad_shell,\n            }\n        )\n\n        command.options.python_shell = 'ipython'\n\n        command.run()\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_bpython_shell(self):\n        command = self._makeOne()\n        shell = dummy.DummyBPythonShell()\n\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: None,\n                'bpython': lambda: shell,\n            }\n        )\n\n        command.options.python_shell = 'bpython'\n        command.run()\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.locals_, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.banner)\n\n    def test_shell_entry_points(self):\n        command = self._makeOne()\n        dshell = dummy.DummyShell()\n\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: dshell,\n                'bpython': lambda: dhell,\n            }\n        )\n\n        command.make_default_shell = lambda: None\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n\n    def test_shell_ordering(self):\n        command = self._makeOne()\n        ipshell = dummy.DummyShell()\n        bpshell = dummy.DummyShell()\n        dshell = dummy.DummyShell()\n\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: None,\n                'bpython': lambda: None,\n            }\n        )\n\n        command.make_default_shell = lambda: dshell\n\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n\n        command.options.python_shell = 'ipython'\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n\n        command.options.python_shell = 'bpython'\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: ipshell,\n                'bpython': lambda: bpshell,\n                'python': lambda: dshell,\n            }\n        )\n\n        command.options.python_shell = 'ipython'\n        shell = command.make_shell()\n        self.assertEqual(shell, ipshell)\n\n        command.options.python_shell = 'bpython'\n        shell = command.make_shell()\n        self.assertEqual(shell, bpshell)\n\n        command.options.python_shell = 'python'\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n\n    def test_command_loads_custom_items(self):\n        command = self._makeOne()\n        model = dummy.Dummy()\n        self.config_factory.items = [('m', model)]\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n            'm':model,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_setup(self):\n        command = self._makeOne()\n        def setup(env):\n            env['a'] = 1\n            env['root'] = 'root override'\n        self.config_factory.items = [('setup', setup)]\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':'root override',\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n            'a':1,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_check_variable_override_order(self):\n        command = self._makeOne()\n        model = dummy.Dummy()\n        def setup(env):\n            env['a'] = 1\n            env['m'] = 'model override'\n            env['root'] = 'root override'\n        self.config_factory.items = [('setup', setup), ('m', model)]\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':'root override',\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n            'a':1, 'm':model,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_setup_from_options(self):\n        command = self._makeOne()\n        def setup(env):\n            env['a'] = 1\n            env['root'] = 'root override'\n        model = dummy.Dummy()\n        self.config_factory.items = [('setup', 'abc'),\n                                     ('m', model)]\n        command.options.setup = setup\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':'root override',\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n            'a':1, 'm':model,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_custom_section_override(self):\n        command = self._makeOne()\n        dummy_ = dummy.Dummy()\n        self.config_factory.items = [('app', dummy_), ('root', dummy_),\n                                     ('registry', dummy_), ('request', dummy_)]\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':dummy_, 'root':dummy_, 'registry':dummy_, 'request':dummy_,\n            'root_factory':self.bootstrap.root_factory,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_pythonstartup(self):\n        command = self._makeOne()\n        command.pystartup = (\n            os.path.abspath(\n                os.path.join(\n                    os.path.dirname(__file__),\n                    'pystartup.txt')))\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n            'foo':1,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)",
                                "ast_type_str": "ClassDef",
                                "start_lineno": 6,
                                "end_lineno": 368,
                                "parent": null
                            }
                        }
                    ],
                    "added_entities": [],
                    "deleted_entities": []
                },
                {
                    "descriptor": {
                        "old_range": {
                            "start": 101,
                            "length": 21
                        },
                        "new_range": {
                            "start": 108,
                            "length": 17
                        },
                        "section": "class TestPShellCommand(unittest.TestCase):"
                    },
                    "line_group": {
                        "all_lines": [
                            {
                                "content": "        )",
                                "type": "context"
                            },
                            {
                                "content": "",
                                "type": "context"
                            },
                            {
                                "content": "        command.make_default_shell = lambda: shell",
                                "type": "context"
                            },
                            {
                                "content": "        command.options.python_shell = 'unknow_python_shell'",
                                "type": "deleted"
                            },
                            {
                                "content": "        command.run()",
                                "type": "deleted"
                            },
                            {
                                "content": "        command.options.python_shell = 'unknown_python_shell'",
                                "type": "added"
                            },
                            {
                                "content": "        result = command.run()",
                                "type": "added"
                            },
                            {
                                "content": "        self.assertEqual(result, 1)",
                                "type": "added"
                            },
                            {
                                "content": "        self.assertEqual(",
                                "type": "added"
                            },
                            {
                                "content": "            out_calls, ['could not find a shell named \"unknown_python_shell\"']",
                                "type": "added"
                            },
                            {
                                "content": "        )",
                                "type": "added"
                            },
                            {
                                "content": "        self.assertTrue(self.config_factory.parser)",
                                "type": "context"
                            },
                            {
                                "content": "        self.assertEqual(self.config_factory.parser.filename,",
                                "type": "context"
                            },
                            {
                                "content": "                         '/foo/bar/myapp.ini')",
                                "type": "context"
                            },
                            {
                                "content": "        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')",
                                "type": "context"
                            },
                            {
                                "content": "        self.assertEqual(shell.env, {",
                                "type": "deleted"
                            },
                            {
                                "content": "            'app':self.bootstrap.app, 'root':self.bootstrap.root,",
                                "type": "deleted"
                            },
                            {
                                "content": "            'registry':self.bootstrap.registry,",
                                "type": "deleted"
                            },
                            {
                                "content": "            'request':self.bootstrap.request,",
                                "type": "deleted"
                            },
                            {
                                "content": "            'root_factory':self.bootstrap.root_factory,",
                                "type": "deleted"
                            },
                            {
                                "content": "        })",
                                "type": "deleted"
                            },
                            {
                                "content": "        self.assertEqual(bad_shell.env, {})",
                                "type": "deleted"
                            },
                            {
                                "content": "        self.assertTrue(self.bootstrap.closer.called)",
                                "type": "context"
                            },
                            {
                                "content": "        self.assertTrue(shell.help)",
                                "type": "deleted"
                            },
                            {
                                "content": "",
                                "type": "context"
                            },
                            {
                                "content": "    def test_command_loads_ipython_v1_1(self):",
                                "type": "context"
                            },
                            {
                                "content": "        command = self._makeOne()",
                                "type": "context"
                            }
                        ]
                    },
                    "modified_entities": [
                        {
                            "file_name": "pyramid/tests/test_scripts/test_pshell.py",
                            "type": "class",
                            "name": "TestPShellCommand",
                            "content": "class TestPShellCommand(unittest.TestCase):\n    def _getTargetClass(self):\n        from pyramid.scripts.pshell import PShellCommand\n        return PShellCommand\n\n    def _makeOne(self, patch_bootstrap=True, patch_config=True,\n                 patch_args=True, patch_options=True):\n        cmd = self._getTargetClass()([])\n\n        if patch_bootstrap:\n            self.bootstrap = dummy.DummyBootstrap()\n            cmd.bootstrap = (self.bootstrap,)\n        if patch_config:\n            self.config_factory = dummy.DummyConfigParserFactory()\n            cmd.ConfigParser = self.config_factory\n        if patch_args:\n            self.args = ('/foo/bar/myapp.ini#myapp',)\n            cmd.args = self.args\n        if patch_options:\n            class Options(object): pass\n            self.options = Options()\n            self.options.python_shell = ''\n            self.options.setup = None\n            cmd.options = self.options\n\n        # default to None to prevent side-effects from running tests in\n        # unknown environments\n        cmd.pystartup = None\n        return cmd\n\n    def _makeEntryPoints(self, command, shells):\n        command.pkg_resources = dummy.DummyPkgResources(shells)\n\n    def test_make_default_shell(self):\n        command = self._makeOne()\n        interact = dummy.DummyInteractor()\n        shell = command.make_default_shell(interact)\n        shell({'foo': 'bar'}, 'a help message')\n        self.assertEqual(interact.local, {'foo': 'bar'})\n        self.assertTrue('a help message' in interact.banner)\n\n    def test_make_bpython_shell(self):\n        command = self._makeOne()\n        bpython = dummy.DummyBPythonShell()\n        shell = command.make_bpython_shell(bpython)\n        shell({'foo': 'bar'}, 'a help message')\n        self.assertEqual(bpython.locals_, {'foo': 'bar'})\n        self.assertTrue('a help message' in bpython.banner)\n\n    def test_make_ipython_v1_1_shell(self):\n        command = self._makeOne()\n        ipshell_factory = dummy.DummyIPShellFactory()\n        shell = command.make_ipython_shell(ipshell_factory)\n        shell({'foo': 'bar'}, 'a help message')\n        self.assertEqual(ipshell_factory.kw['user_ns'], {'foo': 'bar'})\n        self.assertTrue('a help message' in ipshell_factory.kw['banner2'])\n        self.assertTrue(ipshell_factory.shell.called)\n\n    def test_command_loads_default_shell(self):\n        command = self._makeOne()\n        shell = dummy.DummyShell()\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: None,\n                'bpython': lambda: None,\n            }\n        )\n\n        command.make_default_shell = lambda: shell\n        command.run()\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_default_shell_with_unknown_shell(self):\n        command = self._makeOne()\n        shell = dummy.DummyShell()\n        bad_shell = dummy.DummyShell()\n\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: bad_shell,\n                'bpython': lambda: bad_shell,\n            }\n        )\n\n        command.make_default_shell = lambda: shell\n        command.options.python_shell = 'unknow_python_shell'\n        command.run()\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n        })\n        self.assertEqual(bad_shell.env, {})\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_ipython_v1_1(self):\n        command = self._makeOne()\n        shell = dummy.DummyShell()\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: shell,\n                'bpython': lambda: bad_shell,\n            }\n        )\n\n        command.options.python_shell = 'ipython'\n\n        command.run()\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_bpython_shell(self):\n        command = self._makeOne()\n        shell = dummy.DummyBPythonShell()\n\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: None,\n                'bpython': lambda: shell,\n            }\n        )\n\n        command.options.python_shell = 'bpython'\n        command.run()\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.locals_, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.banner)\n\n    def test_shell_entry_points(self):\n        command = self._makeOne()\n        dshell = dummy.DummyShell()\n\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: dshell,\n                'bpython': lambda: dhell,\n            }\n        )\n\n        command.make_default_shell = lambda: None\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n\n    def test_shell_ordering(self):\n        command = self._makeOne()\n        ipshell = dummy.DummyShell()\n        bpshell = dummy.DummyShell()\n        dshell = dummy.DummyShell()\n\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: None,\n                'bpython': lambda: None,\n            }\n        )\n\n        command.make_default_shell = lambda: dshell\n\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n\n        command.options.python_shell = 'ipython'\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n\n        command.options.python_shell = 'bpython'\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: ipshell,\n                'bpython': lambda: bpshell,\n            }\n        )\n\n        command.options.python_shell = 'ipython'\n        shell = command.make_shell()\n        self.assertEqual(shell, ipshell)\n\n        command.options.python_shell = 'bpython'\n        shell = command.make_shell()\n        self.assertEqual(shell, bpshell)\n\n        command.options.python_shell = 'python'\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n\n    def test_command_loads_custom_items(self):\n        command = self._makeOne()\n        model = dummy.Dummy()\n        self.config_factory.items = [('m', model)]\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n            'm':model,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_setup(self):\n        command = self._makeOne()\n        def setup(env):\n            env['a'] = 1\n            env['root'] = 'root override'\n        self.config_factory.items = [('setup', setup)]\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':'root override',\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n            'a':1,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_check_variable_override_order(self):\n        command = self._makeOne()\n        model = dummy.Dummy()\n        def setup(env):\n            env['a'] = 1\n            env['m'] = 'model override'\n            env['root'] = 'root override'\n        self.config_factory.items = [('setup', setup), ('m', model)]\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':'root override',\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n            'a':1, 'm':model,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_setup_from_options(self):\n        command = self._makeOne()\n        def setup(env):\n            env['a'] = 1\n            env['root'] = 'root override'\n        model = dummy.Dummy()\n        self.config_factory.items = [('setup', 'abc'),\n                                     ('m', model)]\n        command.options.setup = setup\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':'root override',\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n            'a':1, 'm':model,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_custom_section_override(self):\n        command = self._makeOne()\n        dummy_ = dummy.Dummy()\n        self.config_factory.items = [('app', dummy_), ('root', dummy_),\n                                     ('registry', dummy_), ('request', dummy_)]\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':dummy_, 'root':dummy_, 'registry':dummy_, 'request':dummy_,\n            'root_factory':self.bootstrap.root_factory,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_pythonstartup(self):\n        command = self._makeOne()\n        command.pystartup = (\n            os.path.abspath(\n                os.path.join(\n                    os.path.dirname(__file__),\n                    'pystartup.txt')))\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n            'foo':1,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)",
                            "ast_type_str": "ClassDef",
                            "start_lineno": 6,
                            "end_lineno": 364,
                            "parent": null
                        },
                        {
                            "file_name": "pyramid/tests/test_scripts/test_pshell.py",
                            "type": "method",
                            "name": "TestPShellCommand.test_command_loads_default_shell_with_unknown_shell",
                            "content": "class TestPShellCommand(unittest.TestCase):\n    def _getTargetClass(self):\n        from pyramid.scripts.pshell import PShellCommand\n        return PShellCommand\n\n    def _makeOne(self, patch_bootstrap=True, patch_config=True,\n                 patch_args=True, patch_options=True):\n        cmd = self._getTargetClass()([])\n\n        if patch_bootstrap:\n            self.bootstrap = dummy.DummyBootstrap()\n            cmd.bootstrap = (self.bootstrap,)\n        if patch_config:\n            self.config_factory = dummy.DummyConfigParserFactory()\n            cmd.ConfigParser = self.config_factory\n        if patch_args:\n            self.args = ('/foo/bar/myapp.ini#myapp',)\n            cmd.args = self.args\n        if patch_options:\n            class Options(object): pass\n            self.options = Options()\n            self.options.python_shell = ''\n            self.options.setup = None\n            cmd.options = self.options\n\n        # default to None to prevent side-effects from running tests in\n        # unknown environments\n        cmd.pystartup = None\n        return cmd\n\n    def _makeEntryPoints(self, command, shells):\n        command.pkg_resources = dummy.DummyPkgResources(shells)\n\n    def test_make_default_shell(self):\n        command = self._makeOne()\n        interact = dummy.DummyInteractor()\n        shell = command.make_default_shell(interact)\n        shell({'foo': 'bar'}, 'a help message')\n        self.assertEqual(interact.local, {'foo': 'bar'})\n        self.assertTrue('a help message' in interact.banner)\n\n    def test_make_bpython_shell(self):\n        command = self._makeOne()\n        bpython = dummy.DummyBPythonShell()\n        shell = command.make_bpython_shell(bpython)\n        shell({'foo': 'bar'}, 'a help message')\n        self.assertEqual(bpython.locals_, {'foo': 'bar'})\n        self.assertTrue('a help message' in bpython.banner)\n\n    def test_make_ipython_v1_1_shell(self):\n        command = self._makeOne()\n        ipshell_factory = dummy.DummyIPShellFactory()\n        shell = command.make_ipython_shell(ipshell_factory)\n        shell({'foo': 'bar'}, 'a help message')\n        self.assertEqual(ipshell_factory.kw['user_ns'], {'foo': 'bar'})\n        self.assertTrue('a help message' in ipshell_factory.kw['banner2'])\n        self.assertTrue(ipshell_factory.shell.called)\n\n    def test_command_loads_default_shell(self):\n        command = self._makeOne()\n        shell = dummy.DummyShell()\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: None,\n                'bpython': lambda: None,\n            }\n        )\n\n        command.make_default_shell = lambda: shell\n        command.run()\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_default_shell_with_unknown_shell(self):\n        command = self._makeOne()\n        shell = dummy.DummyShell()\n        bad_shell = dummy.DummyShell()\n\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: bad_shell,\n                'bpython': lambda: bad_shell,\n            }\n        )\n\n        command.make_default_shell = lambda: shell\n        command.options.python_shell = 'unknow_python_shell'\n        command.run()\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n        })\n        self.assertEqual(bad_shell.env, {})\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_ipython_v1_1(self):\n        command = self._makeOne()\n        shell = dummy.DummyShell()\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: shell,\n                'bpython': lambda: bad_shell,\n            }\n        )\n\n        command.options.python_shell = 'ipython'\n\n        command.run()\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_bpython_shell(self):\n        command = self._makeOne()\n        shell = dummy.DummyBPythonShell()\n\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: None,\n                'bpython': lambda: shell,\n            }\n        )\n\n        command.options.python_shell = 'bpython'\n        command.run()\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.locals_, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.banner)\n\n    def test_shell_entry_points(self):\n        command = self._makeOne()\n        dshell = dummy.DummyShell()\n\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: dshell,\n                'bpython': lambda: dhell,\n            }\n        )\n\n        command.make_default_shell = lambda: None\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n\n    def test_shell_ordering(self):\n        command = self._makeOne()\n        ipshell = dummy.DummyShell()\n        bpshell = dummy.DummyShell()\n        dshell = dummy.DummyShell()\n\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: None,\n                'bpython': lambda: None,\n            }\n        )\n\n        command.make_default_shell = lambda: dshell\n\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n\n        command.options.python_shell = 'ipython'\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n\n        command.options.python_shell = 'bpython'\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: ipshell,\n                'bpython': lambda: bpshell,\n            }\n        )\n\n        command.options.python_shell = 'ipython'\n        shell = command.make_shell()\n        self.assertEqual(shell, ipshell)\n\n        command.options.python_shell = 'bpython'\n        shell = command.make_shell()\n        self.assertEqual(shell, bpshell)\n\n        command.options.python_shell = 'python'\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n\n    def test_command_loads_custom_items(self):\n        command = self._makeOne()\n        model = dummy.Dummy()\n        self.config_factory.items = [('m', model)]\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n            'm':model,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_setup(self):\n        command = self._makeOne()\n        def setup(env):\n            env['a'] = 1\n            env['root'] = 'root override'\n        self.config_factory.items = [('setup', setup)]\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':'root override',\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n            'a':1,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_check_variable_override_order(self):\n        command = self._makeOne()\n        model = dummy.Dummy()\n        def setup(env):\n            env['a'] = 1\n            env['m'] = 'model override'\n            env['root'] = 'root override'\n        self.config_factory.items = [('setup', setup), ('m', model)]\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':'root override',\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n            'a':1, 'm':model,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_setup_from_options(self):\n        command = self._makeOne()\n        def setup(env):\n            env['a'] = 1\n            env['root'] = 'root override'\n        model = dummy.Dummy()\n        self.config_factory.items = [('setup', 'abc'),\n                                     ('m', model)]\n        command.options.setup = setup\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':'root override',\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n            'a':1, 'm':model,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_custom_section_override(self):\n        command = self._makeOne()\n        dummy_ = dummy.Dummy()\n        self.config_factory.items = [('app', dummy_), ('root', dummy_),\n                                     ('registry', dummy_), ('request', dummy_)]\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':dummy_, 'root':dummy_, 'registry':dummy_, 'request':dummy_,\n            'root_factory':self.bootstrap.root_factory,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_pythonstartup(self):\n        command = self._makeOne()\n        command.pystartup = (\n            os.path.abspath(\n                os.path.join(\n                    os.path.dirname(__file__),\n                    'pystartup.txt')))\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n            'foo':1,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)",
                            "ast_type_str": "ClassDef",
                            "start_lineno": 90,
                            "end_lineno": 118,
                            "parent": {
                                "file_name": "pyramid/tests/test_scripts/test_pshell.py",
                                "type": "class",
                                "name": "TestPShellCommand",
                                "content": "class TestPShellCommand(unittest.TestCase):\n    def _getTargetClass(self):\n        from pyramid.scripts.pshell import PShellCommand\n        return PShellCommand\n\n    def _makeOne(self, patch_bootstrap=True, patch_config=True,\n                 patch_args=True, patch_options=True):\n        cmd = self._getTargetClass()([])\n\n        if patch_bootstrap:\n            self.bootstrap = dummy.DummyBootstrap()\n            cmd.bootstrap = (self.bootstrap,)\n        if patch_config:\n            self.config_factory = dummy.DummyConfigParserFactory()\n            cmd.ConfigParser = self.config_factory\n        if patch_args:\n            self.args = ('/foo/bar/myapp.ini#myapp',)\n            cmd.args = self.args\n        if patch_options:\n            class Options(object): pass\n            self.options = Options()\n            self.options.python_shell = ''\n            self.options.setup = None\n            cmd.options = self.options\n\n        # default to None to prevent side-effects from running tests in\n        # unknown environments\n        cmd.pystartup = None\n        return cmd\n\n    def _makeEntryPoints(self, command, shells):\n        command.pkg_resources = dummy.DummyPkgResources(shells)\n\n    def test_make_default_shell(self):\n        command = self._makeOne()\n        interact = dummy.DummyInteractor()\n        shell = command.make_default_shell(interact)\n        shell({'foo': 'bar'}, 'a help message')\n        self.assertEqual(interact.local, {'foo': 'bar'})\n        self.assertTrue('a help message' in interact.banner)\n\n    def test_make_bpython_shell(self):\n        command = self._makeOne()\n        bpython = dummy.DummyBPythonShell()\n        shell = command.make_bpython_shell(bpython)\n        shell({'foo': 'bar'}, 'a help message')\n        self.assertEqual(bpython.locals_, {'foo': 'bar'})\n        self.assertTrue('a help message' in bpython.banner)\n\n    def test_make_ipython_v1_1_shell(self):\n        command = self._makeOne()\n        ipshell_factory = dummy.DummyIPShellFactory()\n        shell = command.make_ipython_shell(ipshell_factory)\n        shell({'foo': 'bar'}, 'a help message')\n        self.assertEqual(ipshell_factory.kw['user_ns'], {'foo': 'bar'})\n        self.assertTrue('a help message' in ipshell_factory.kw['banner2'])\n        self.assertTrue(ipshell_factory.shell.called)\n\n    def test_command_loads_default_shell(self):\n        command = self._makeOne()\n        shell = dummy.DummyShell()\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: None,\n                'bpython': lambda: None,\n            }\n        )\n\n        command.make_default_shell = lambda: shell\n        command.run()\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_default_shell_with_unknown_shell(self):\n        command = self._makeOne()\n        shell = dummy.DummyShell()\n        bad_shell = dummy.DummyShell()\n\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: bad_shell,\n                'bpython': lambda: bad_shell,\n            }\n        )\n\n        command.make_default_shell = lambda: shell\n        command.options.python_shell = 'unknow_python_shell'\n        command.run()\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n        })\n        self.assertEqual(bad_shell.env, {})\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_ipython_v1_1(self):\n        command = self._makeOne()\n        shell = dummy.DummyShell()\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: shell,\n                'bpython': lambda: bad_shell,\n            }\n        )\n\n        command.options.python_shell = 'ipython'\n\n        command.run()\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_bpython_shell(self):\n        command = self._makeOne()\n        shell = dummy.DummyBPythonShell()\n\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: None,\n                'bpython': lambda: shell,\n            }\n        )\n\n        command.options.python_shell = 'bpython'\n        command.run()\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.locals_, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.banner)\n\n    def test_shell_entry_points(self):\n        command = self._makeOne()\n        dshell = dummy.DummyShell()\n\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: dshell,\n                'bpython': lambda: dhell,\n            }\n        )\n\n        command.make_default_shell = lambda: None\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n\n    def test_shell_ordering(self):\n        command = self._makeOne()\n        ipshell = dummy.DummyShell()\n        bpshell = dummy.DummyShell()\n        dshell = dummy.DummyShell()\n\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: None,\n                'bpython': lambda: None,\n            }\n        )\n\n        command.make_default_shell = lambda: dshell\n\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n\n        command.options.python_shell = 'ipython'\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n\n        command.options.python_shell = 'bpython'\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: ipshell,\n                'bpython': lambda: bpshell,\n            }\n        )\n\n        command.options.python_shell = 'ipython'\n        shell = command.make_shell()\n        self.assertEqual(shell, ipshell)\n\n        command.options.python_shell = 'bpython'\n        shell = command.make_shell()\n        self.assertEqual(shell, bpshell)\n\n        command.options.python_shell = 'python'\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n\n    def test_command_loads_custom_items(self):\n        command = self._makeOne()\n        model = dummy.Dummy()\n        self.config_factory.items = [('m', model)]\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n            'm':model,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_setup(self):\n        command = self._makeOne()\n        def setup(env):\n            env['a'] = 1\n            env['root'] = 'root override'\n        self.config_factory.items = [('setup', setup)]\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':'root override',\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n            'a':1,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_check_variable_override_order(self):\n        command = self._makeOne()\n        model = dummy.Dummy()\n        def setup(env):\n            env['a'] = 1\n            env['m'] = 'model override'\n            env['root'] = 'root override'\n        self.config_factory.items = [('setup', setup), ('m', model)]\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':'root override',\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n            'a':1, 'm':model,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_setup_from_options(self):\n        command = self._makeOne()\n        def setup(env):\n            env['a'] = 1\n            env['root'] = 'root override'\n        model = dummy.Dummy()\n        self.config_factory.items = [('setup', 'abc'),\n                                     ('m', model)]\n        command.options.setup = setup\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':'root override',\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n            'a':1, 'm':model,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_custom_section_override(self):\n        command = self._makeOne()\n        dummy_ = dummy.Dummy()\n        self.config_factory.items = [('app', dummy_), ('root', dummy_),\n                                     ('registry', dummy_), ('request', dummy_)]\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':dummy_, 'root':dummy_, 'registry':dummy_, 'request':dummy_,\n            'root_factory':self.bootstrap.root_factory,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_pythonstartup(self):\n        command = self._makeOne()\n        command.pystartup = (\n            os.path.abspath(\n                os.path.join(\n                    os.path.dirname(__file__),\n                    'pystartup.txt')))\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n            'foo':1,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)",
                                "ast_type_str": "ClassDef",
                                "start_lineno": 6,
                                "end_lineno": 364,
                                "parent": null
                            }
                        }
                    ],
                    "added_entities": [],
                    "deleted_entities": []
                },
                {
                    "descriptor": {
                        "old_range": {
                            "start": 219,
                            "length": 6
                        },
                        "new_range": {
                            "start": 222,
                            "length": 7
                        },
                        "section": "class TestPShellCommand(unittest.TestCase):"
                    },
                    "line_group": {
                        "all_lines": [
                            {
                                "content": "            {",
                                "type": "context"
                            },
                            {
                                "content": "                'ipython': lambda: ipshell,",
                                "type": "context"
                            },
                            {
                                "content": "                'bpython': lambda: bpshell,",
                                "type": "context"
                            },
                            {
                                "content": "                'python': lambda: dshell,",
                                "type": "added"
                            },
                            {
                                "content": "            }",
                                "type": "context"
                            },
                            {
                                "content": "        )",
                                "type": "context"
                            },
                            {
                                "content": "",
                                "type": "context"
                            },
                            {
                                "content": "",
                                "type": "context"
                            }
                        ]
                    },
                    "modified_entities": [
                        {
                            "file_name": "pyramid/tests/test_scripts/test_pshell.py",
                            "type": "class",
                            "name": "TestPShellCommand",
                            "content": "class TestPShellCommand(unittest.TestCase):\n    def _getTargetClass(self):\n        from pyramid.scripts.pshell import PShellCommand\n        return PShellCommand\n\n    def _makeOne(self, patch_bootstrap=True, patch_config=True,\n                 patch_args=True, patch_options=True):\n        cmd = self._getTargetClass()([])\n\n        if patch_bootstrap:\n            self.bootstrap = dummy.DummyBootstrap()\n            cmd.bootstrap = (self.bootstrap,)\n        if patch_config:\n            self.config_factory = dummy.DummyConfigParserFactory()\n            cmd.ConfigParser = self.config_factory\n        if patch_args:\n            self.args = ('/foo/bar/myapp.ini#myapp',)\n            cmd.args = self.args\n        if patch_options:\n            class Options(object): pass\n            self.options = Options()\n            self.options.python_shell = ''\n            self.options.setup = None\n            cmd.options = self.options\n\n        # default to None to prevent side-effects from running tests in\n        # unknown environments\n        cmd.pystartup = None\n        return cmd\n\n    def _makeEntryPoints(self, command, shells):\n        command.pkg_resources = dummy.DummyPkgResources(shells)\n\n    def test_make_default_shell(self):\n        command = self._makeOne()\n        interact = dummy.DummyInteractor()\n        shell = command.make_default_shell(interact)\n        shell({'foo': 'bar'}, 'a help message')\n        self.assertEqual(interact.local, {'foo': 'bar'})\n        self.assertTrue('a help message' in interact.banner)\n\n    def test_make_bpython_shell(self):\n        command = self._makeOne()\n        bpython = dummy.DummyBPythonShell()\n        shell = command.make_bpython_shell(bpython)\n        shell({'foo': 'bar'}, 'a help message')\n        self.assertEqual(bpython.locals_, {'foo': 'bar'})\n        self.assertTrue('a help message' in bpython.banner)\n\n    def test_make_ipython_v1_1_shell(self):\n        command = self._makeOne()\n        ipshell_factory = dummy.DummyIPShellFactory()\n        shell = command.make_ipython_shell(ipshell_factory)\n        shell({'foo': 'bar'}, 'a help message')\n        self.assertEqual(ipshell_factory.kw['user_ns'], {'foo': 'bar'})\n        self.assertTrue('a help message' in ipshell_factory.kw['banner2'])\n        self.assertTrue(ipshell_factory.shell.called)\n\n    def test_command_loads_default_shell(self):\n        command = self._makeOne()\n        shell = dummy.DummyShell()\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: None,\n                'bpython': lambda: None,\n            }\n        )\n\n        command.make_default_shell = lambda: shell\n        command.run()\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_default_shell_with_unknown_shell(self):\n        command = self._makeOne()\n        out_calls = []\n\n        def out(msg):\n            out_calls.append(msg)\n\n        command.out = out\n\n        shell = dummy.DummyShell()\n        bad_shell = dummy.DummyShell()\n\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: bad_shell,\n                'bpython': lambda: bad_shell,\n            }\n        )\n\n        command.make_default_shell = lambda: shell\n        command.options.python_shell = 'unknown_python_shell'\n        result = command.run()\n        self.assertEqual(result, 1)\n        self.assertEqual(\n            out_calls, ['could not find a shell named \"unknown_python_shell\"']\n        )\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertTrue(self.bootstrap.closer.called)\n\n    def test_command_loads_ipython_v1_1(self):\n        command = self._makeOne()\n        shell = dummy.DummyShell()\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: shell,\n                'bpython': lambda: bad_shell,\n            }\n        )\n\n        command.options.python_shell = 'ipython'\n\n        command.run()\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_bpython_shell(self):\n        command = self._makeOne()\n        shell = dummy.DummyBPythonShell()\n\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: None,\n                'bpython': lambda: shell,\n            }\n        )\n\n        command.options.python_shell = 'bpython'\n        command.run()\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.locals_, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.banner)\n\n    def test_shell_entry_points(self):\n        command = self._makeOne()\n        dshell = dummy.DummyShell()\n\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: dshell,\n                'bpython': lambda: dhell,\n            }\n        )\n\n        command.make_default_shell = lambda: None\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n\n    def test_shell_ordering(self):\n        command = self._makeOne()\n        ipshell = dummy.DummyShell()\n        bpshell = dummy.DummyShell()\n        dshell = dummy.DummyShell()\n\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: None,\n                'bpython': lambda: None,\n            }\n        )\n\n        command.make_default_shell = lambda: dshell\n\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n\n        command.options.python_shell = 'ipython'\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n\n        command.options.python_shell = 'bpython'\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: ipshell,\n                'bpython': lambda: bpshell,\n                'python': lambda: dshell,\n            }\n        )\n\n        command.options.python_shell = 'ipython'\n        shell = command.make_shell()\n        self.assertEqual(shell, ipshell)\n\n        command.options.python_shell = 'bpython'\n        shell = command.make_shell()\n        self.assertEqual(shell, bpshell)\n\n        command.options.python_shell = 'python'\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n\n    def test_command_loads_custom_items(self):\n        command = self._makeOne()\n        model = dummy.Dummy()\n        self.config_factory.items = [('m', model)]\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n            'm':model,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_setup(self):\n        command = self._makeOne()\n        def setup(env):\n            env['a'] = 1\n            env['root'] = 'root override'\n        self.config_factory.items = [('setup', setup)]\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':'root override',\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n            'a':1,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_check_variable_override_order(self):\n        command = self._makeOne()\n        model = dummy.Dummy()\n        def setup(env):\n            env['a'] = 1\n            env['m'] = 'model override'\n            env['root'] = 'root override'\n        self.config_factory.items = [('setup', setup), ('m', model)]\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':'root override',\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n            'a':1, 'm':model,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_setup_from_options(self):\n        command = self._makeOne()\n        def setup(env):\n            env['a'] = 1\n            env['root'] = 'root override'\n        model = dummy.Dummy()\n        self.config_factory.items = [('setup', 'abc'),\n                                     ('m', model)]\n        command.options.setup = setup\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':'root override',\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n            'a':1, 'm':model,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_custom_section_override(self):\n        command = self._makeOne()\n        dummy_ = dummy.Dummy()\n        self.config_factory.items = [('app', dummy_), ('root', dummy_),\n                                     ('registry', dummy_), ('request', dummy_)]\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':dummy_, 'root':dummy_, 'registry':dummy_, 'request':dummy_,\n            'root_factory':self.bootstrap.root_factory,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_pythonstartup(self):\n        command = self._makeOne()\n        command.pystartup = (\n            os.path.abspath(\n                os.path.join(\n                    os.path.dirname(__file__),\n                    'pystartup.txt')))\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n            'foo':1,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)",
                            "ast_type_str": "ClassDef",
                            "start_lineno": 6,
                            "end_lineno": 368,
                            "parent": null
                        },
                        {
                            "file_name": "pyramid/tests/test_scripts/test_pshell.py",
                            "type": "method",
                            "name": "TestPShellCommand.test_shell_ordering",
                            "content": "class TestPShellCommand(unittest.TestCase):\n    def _getTargetClass(self):\n        from pyramid.scripts.pshell import PShellCommand\n        return PShellCommand\n\n    def _makeOne(self, patch_bootstrap=True, patch_config=True,\n                 patch_args=True, patch_options=True):\n        cmd = self._getTargetClass()([])\n\n        if patch_bootstrap:\n            self.bootstrap = dummy.DummyBootstrap()\n            cmd.bootstrap = (self.bootstrap,)\n        if patch_config:\n            self.config_factory = dummy.DummyConfigParserFactory()\n            cmd.ConfigParser = self.config_factory\n        if patch_args:\n            self.args = ('/foo/bar/myapp.ini#myapp',)\n            cmd.args = self.args\n        if patch_options:\n            class Options(object): pass\n            self.options = Options()\n            self.options.python_shell = ''\n            self.options.setup = None\n            cmd.options = self.options\n\n        # default to None to prevent side-effects from running tests in\n        # unknown environments\n        cmd.pystartup = None\n        return cmd\n\n    def _makeEntryPoints(self, command, shells):\n        command.pkg_resources = dummy.DummyPkgResources(shells)\n\n    def test_make_default_shell(self):\n        command = self._makeOne()\n        interact = dummy.DummyInteractor()\n        shell = command.make_default_shell(interact)\n        shell({'foo': 'bar'}, 'a help message')\n        self.assertEqual(interact.local, {'foo': 'bar'})\n        self.assertTrue('a help message' in interact.banner)\n\n    def test_make_bpython_shell(self):\n        command = self._makeOne()\n        bpython = dummy.DummyBPythonShell()\n        shell = command.make_bpython_shell(bpython)\n        shell({'foo': 'bar'}, 'a help message')\n        self.assertEqual(bpython.locals_, {'foo': 'bar'})\n        self.assertTrue('a help message' in bpython.banner)\n\n    def test_make_ipython_v1_1_shell(self):\n        command = self._makeOne()\n        ipshell_factory = dummy.DummyIPShellFactory()\n        shell = command.make_ipython_shell(ipshell_factory)\n        shell({'foo': 'bar'}, 'a help message')\n        self.assertEqual(ipshell_factory.kw['user_ns'], {'foo': 'bar'})\n        self.assertTrue('a help message' in ipshell_factory.kw['banner2'])\n        self.assertTrue(ipshell_factory.shell.called)\n\n    def test_command_loads_default_shell(self):\n        command = self._makeOne()\n        shell = dummy.DummyShell()\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: None,\n                'bpython': lambda: None,\n            }\n        )\n\n        command.make_default_shell = lambda: shell\n        command.run()\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_default_shell_with_unknown_shell(self):\n        command = self._makeOne()\n        out_calls = []\n\n        def out(msg):\n            out_calls.append(msg)\n\n        command.out = out\n\n        shell = dummy.DummyShell()\n        bad_shell = dummy.DummyShell()\n\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: bad_shell,\n                'bpython': lambda: bad_shell,\n            }\n        )\n\n        command.make_default_shell = lambda: shell\n        command.options.python_shell = 'unknown_python_shell'\n        result = command.run()\n        self.assertEqual(result, 1)\n        self.assertEqual(\n            out_calls, ['could not find a shell named \"unknown_python_shell\"']\n        )\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertTrue(self.bootstrap.closer.called)\n\n    def test_command_loads_ipython_v1_1(self):\n        command = self._makeOne()\n        shell = dummy.DummyShell()\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: shell,\n                'bpython': lambda: bad_shell,\n            }\n        )\n\n        command.options.python_shell = 'ipython'\n\n        command.run()\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_bpython_shell(self):\n        command = self._makeOne()\n        shell = dummy.DummyBPythonShell()\n\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: None,\n                'bpython': lambda: shell,\n            }\n        )\n\n        command.options.python_shell = 'bpython'\n        command.run()\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.locals_, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.banner)\n\n    def test_shell_entry_points(self):\n        command = self._makeOne()\n        dshell = dummy.DummyShell()\n\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: dshell,\n                'bpython': lambda: dhell,\n            }\n        )\n\n        command.make_default_shell = lambda: None\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n\n    def test_shell_ordering(self):\n        command = self._makeOne()\n        ipshell = dummy.DummyShell()\n        bpshell = dummy.DummyShell()\n        dshell = dummy.DummyShell()\n\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: None,\n                'bpython': lambda: None,\n            }\n        )\n\n        command.make_default_shell = lambda: dshell\n\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n\n        command.options.python_shell = 'ipython'\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n\n        command.options.python_shell = 'bpython'\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: ipshell,\n                'bpython': lambda: bpshell,\n                'python': lambda: dshell,\n            }\n        )\n\n        command.options.python_shell = 'ipython'\n        shell = command.make_shell()\n        self.assertEqual(shell, ipshell)\n\n        command.options.python_shell = 'bpython'\n        shell = command.make_shell()\n        self.assertEqual(shell, bpshell)\n\n        command.options.python_shell = 'python'\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n\n    def test_command_loads_custom_items(self):\n        command = self._makeOne()\n        model = dummy.Dummy()\n        self.config_factory.items = [('m', model)]\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n            'm':model,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_setup(self):\n        command = self._makeOne()\n        def setup(env):\n            env['a'] = 1\n            env['root'] = 'root override'\n        self.config_factory.items = [('setup', setup)]\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':'root override',\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n            'a':1,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_check_variable_override_order(self):\n        command = self._makeOne()\n        model = dummy.Dummy()\n        def setup(env):\n            env['a'] = 1\n            env['m'] = 'model override'\n            env['root'] = 'root override'\n        self.config_factory.items = [('setup', setup), ('m', model)]\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':'root override',\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n            'a':1, 'm':model,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_setup_from_options(self):\n        command = self._makeOne()\n        def setup(env):\n            env['a'] = 1\n            env['root'] = 'root override'\n        model = dummy.Dummy()\n        self.config_factory.items = [('setup', 'abc'),\n                                     ('m', model)]\n        command.options.setup = setup\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':'root override',\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n            'a':1, 'm':model,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_custom_section_override(self):\n        command = self._makeOne()\n        dummy_ = dummy.Dummy()\n        self.config_factory.items = [('app', dummy_), ('root', dummy_),\n                                     ('registry', dummy_), ('request', dummy_)]\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':dummy_, 'root':dummy_, 'registry':dummy_, 'request':dummy_,\n            'root_factory':self.bootstrap.root_factory,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_pythonstartup(self):\n        command = self._makeOne()\n        command.pystartup = (\n            os.path.abspath(\n                os.path.join(\n                    os.path.dirname(__file__),\n                    'pystartup.txt')))\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n            'foo':1,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)",
                            "ast_type_str": "ClassDef",
                            "start_lineno": 193,
                            "end_lineno": 239,
                            "parent": {
                                "file_name": "pyramid/tests/test_scripts/test_pshell.py",
                                "type": "class",
                                "name": "TestPShellCommand",
                                "content": "class TestPShellCommand(unittest.TestCase):\n    def _getTargetClass(self):\n        from pyramid.scripts.pshell import PShellCommand\n        return PShellCommand\n\n    def _makeOne(self, patch_bootstrap=True, patch_config=True,\n                 patch_args=True, patch_options=True):\n        cmd = self._getTargetClass()([])\n\n        if patch_bootstrap:\n            self.bootstrap = dummy.DummyBootstrap()\n            cmd.bootstrap = (self.bootstrap,)\n        if patch_config:\n            self.config_factory = dummy.DummyConfigParserFactory()\n            cmd.ConfigParser = self.config_factory\n        if patch_args:\n            self.args = ('/foo/bar/myapp.ini#myapp',)\n            cmd.args = self.args\n        if patch_options:\n            class Options(object): pass\n            self.options = Options()\n            self.options.python_shell = ''\n            self.options.setup = None\n            cmd.options = self.options\n\n        # default to None to prevent side-effects from running tests in\n        # unknown environments\n        cmd.pystartup = None\n        return cmd\n\n    def _makeEntryPoints(self, command, shells):\n        command.pkg_resources = dummy.DummyPkgResources(shells)\n\n    def test_make_default_shell(self):\n        command = self._makeOne()\n        interact = dummy.DummyInteractor()\n        shell = command.make_default_shell(interact)\n        shell({'foo': 'bar'}, 'a help message')\n        self.assertEqual(interact.local, {'foo': 'bar'})\n        self.assertTrue('a help message' in interact.banner)\n\n    def test_make_bpython_shell(self):\n        command = self._makeOne()\n        bpython = dummy.DummyBPythonShell()\n        shell = command.make_bpython_shell(bpython)\n        shell({'foo': 'bar'}, 'a help message')\n        self.assertEqual(bpython.locals_, {'foo': 'bar'})\n        self.assertTrue('a help message' in bpython.banner)\n\n    def test_make_ipython_v1_1_shell(self):\n        command = self._makeOne()\n        ipshell_factory = dummy.DummyIPShellFactory()\n        shell = command.make_ipython_shell(ipshell_factory)\n        shell({'foo': 'bar'}, 'a help message')\n        self.assertEqual(ipshell_factory.kw['user_ns'], {'foo': 'bar'})\n        self.assertTrue('a help message' in ipshell_factory.kw['banner2'])\n        self.assertTrue(ipshell_factory.shell.called)\n\n    def test_command_loads_default_shell(self):\n        command = self._makeOne()\n        shell = dummy.DummyShell()\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: None,\n                'bpython': lambda: None,\n            }\n        )\n\n        command.make_default_shell = lambda: shell\n        command.run()\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_default_shell_with_unknown_shell(self):\n        command = self._makeOne()\n        out_calls = []\n\n        def out(msg):\n            out_calls.append(msg)\n\n        command.out = out\n\n        shell = dummy.DummyShell()\n        bad_shell = dummy.DummyShell()\n\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: bad_shell,\n                'bpython': lambda: bad_shell,\n            }\n        )\n\n        command.make_default_shell = lambda: shell\n        command.options.python_shell = 'unknown_python_shell'\n        result = command.run()\n        self.assertEqual(result, 1)\n        self.assertEqual(\n            out_calls, ['could not find a shell named \"unknown_python_shell\"']\n        )\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertTrue(self.bootstrap.closer.called)\n\n    def test_command_loads_ipython_v1_1(self):\n        command = self._makeOne()\n        shell = dummy.DummyShell()\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: shell,\n                'bpython': lambda: bad_shell,\n            }\n        )\n\n        command.options.python_shell = 'ipython'\n\n        command.run()\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_bpython_shell(self):\n        command = self._makeOne()\n        shell = dummy.DummyBPythonShell()\n\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: None,\n                'bpython': lambda: shell,\n            }\n        )\n\n        command.options.python_shell = 'bpython'\n        command.run()\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.locals_, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.banner)\n\n    def test_shell_entry_points(self):\n        command = self._makeOne()\n        dshell = dummy.DummyShell()\n\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: dshell,\n                'bpython': lambda: dhell,\n            }\n        )\n\n        command.make_default_shell = lambda: None\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n\n    def test_shell_ordering(self):\n        command = self._makeOne()\n        ipshell = dummy.DummyShell()\n        bpshell = dummy.DummyShell()\n        dshell = dummy.DummyShell()\n\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: None,\n                'bpython': lambda: None,\n            }\n        )\n\n        command.make_default_shell = lambda: dshell\n\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n\n        command.options.python_shell = 'ipython'\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n\n        command.options.python_shell = 'bpython'\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: ipshell,\n                'bpython': lambda: bpshell,\n                'python': lambda: dshell,\n            }\n        )\n\n        command.options.python_shell = 'ipython'\n        shell = command.make_shell()\n        self.assertEqual(shell, ipshell)\n\n        command.options.python_shell = 'bpython'\n        shell = command.make_shell()\n        self.assertEqual(shell, bpshell)\n\n        command.options.python_shell = 'python'\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n\n    def test_command_loads_custom_items(self):\n        command = self._makeOne()\n        model = dummy.Dummy()\n        self.config_factory.items = [('m', model)]\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n            'm':model,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_setup(self):\n        command = self._makeOne()\n        def setup(env):\n            env['a'] = 1\n            env['root'] = 'root override'\n        self.config_factory.items = [('setup', setup)]\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':'root override',\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n            'a':1,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_check_variable_override_order(self):\n        command = self._makeOne()\n        model = dummy.Dummy()\n        def setup(env):\n            env['a'] = 1\n            env['m'] = 'model override'\n            env['root'] = 'root override'\n        self.config_factory.items = [('setup', setup), ('m', model)]\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':'root override',\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n            'a':1, 'm':model,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_setup_from_options(self):\n        command = self._makeOne()\n        def setup(env):\n            env['a'] = 1\n            env['root'] = 'root override'\n        model = dummy.Dummy()\n        self.config_factory.items = [('setup', 'abc'),\n                                     ('m', model)]\n        command.options.setup = setup\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':'root override',\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n            'a':1, 'm':model,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_custom_section_override(self):\n        command = self._makeOne()\n        dummy_ = dummy.Dummy()\n        self.config_factory.items = [('app', dummy_), ('root', dummy_),\n                                     ('registry', dummy_), ('request', dummy_)]\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':dummy_, 'root':dummy_, 'registry':dummy_, 'request':dummy_,\n            'root_factory':self.bootstrap.root_factory,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_pythonstartup(self):\n        command = self._makeOne()\n        command.pystartup = (\n            os.path.abspath(\n                os.path.join(\n                    os.path.dirname(__file__),\n                    'pystartup.txt')))\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n            'foo':1,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)",
                                "ast_type_str": "ClassDef",
                                "start_lineno": 6,
                                "end_lineno": 368,
                                "parent": null
                            }
                        }
                    ],
                    "added_entities": [],
                    "deleted_entities": []
                }
            ]
        }
    ],
    "old_commit_hash": "b932a45f834ae6bdb5850a2c58d1317844b32914^",
    "new_commit_hash": "b932a45f834ae6bdb5850a2c58d1317844b32914",
    "commit_message": "removed default fall through when passed a specific shell",
    "commit_date": "2015-10-11T00:50:54-07:00",
    "metadata": {}
}
{
    "repo_name": "pyramid",
    "new_commit_hash": "b932a45f834ae6bdb5850a2c58d1317844b32914",
    "test_file_codes": [
        "import os\nimport unittest\nfrom pyramid.tests.test_scripts import dummy\n\n\nclass TestPShellCommand(unittest.TestCase):\n    def _getTargetClass(self):\n        from pyramid.scripts.pshell import PShellCommand\n        return PShellCommand\n\n    def _makeOne(self, patch_bootstrap=True, patch_config=True,\n                 patch_args=True, patch_options=True):\n        cmd = self._getTargetClass()([])\n\n        if patch_bootstrap:\n            self.bootstrap = dummy.DummyBootstrap()\n            cmd.bootstrap = (self.bootstrap,)\n        if patch_config:\n            self.config_factory = dummy.DummyConfigParserFactory()\n            cmd.ConfigParser = self.config_factory\n        if patch_args:\n            self.args = ('/foo/bar/myapp.ini#myapp',)\n            cmd.args = self.args\n        if patch_options:\n            class Options(object): pass\n            self.options = Options()\n            self.options.python_shell = ''\n            self.options.setup = None\n            cmd.options = self.options\n\n        # default to None to prevent side-effects from running tests in\n        # unknown environments\n        cmd.pystartup = None\n        return cmd\n\n    def _makeEntryPoints(self, command, shells):\n        command.pkg_resources = dummy.DummyPkgResources(shells)\n\n    def test_make_default_shell(self):\n        command = self._makeOne()\n        interact = dummy.DummyInteractor()\n        shell = command.make_default_shell(interact)\n        shell({'foo': 'bar'}, 'a help message')\n        self.assertEqual(interact.local, {'foo': 'bar'})\n        self.assertTrue('a help message' in interact.banner)\n\n    def test_make_bpython_shell(self):\n        command = self._makeOne()\n        bpython = dummy.DummyBPythonShell()\n        shell = command.make_bpython_shell(bpython)\n        shell({'foo': 'bar'}, 'a help message')\n        self.assertEqual(bpython.locals_, {'foo': 'bar'})\n        self.assertTrue('a help message' in bpython.banner)\n\n    def test_make_ipython_v1_1_shell(self):\n        command = self._makeOne()\n        ipshell_factory = dummy.DummyIPShellFactory()\n        shell = command.make_ipython_shell(ipshell_factory)\n        shell({'foo': 'bar'}, 'a help message')\n        self.assertEqual(ipshell_factory.kw['user_ns'], {'foo': 'bar'})\n        self.assertTrue('a help message' in ipshell_factory.kw['banner2'])\n        self.assertTrue(ipshell_factory.shell.called)\n\n    def test_command_loads_default_shell(self):\n        command = self._makeOne()\n        shell = dummy.DummyShell()\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: None,\n                'bpython': lambda: None,\n            }\n        )\n\n        command.make_default_shell = lambda: shell\n        command.run()\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_default_shell_with_unknown_shell(self):\n        command = self._makeOne()\n        out_calls = []\n\n        def out(msg):\n            out_calls.append(msg)\n\n        command.out = out\n\n        shell = dummy.DummyShell()\n        bad_shell = dummy.DummyShell()\n\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: bad_shell,\n                'bpython': lambda: bad_shell,\n            }\n        )\n\n        command.make_default_shell = lambda: shell\n        command.options.python_shell = 'unknown_python_shell'\n        result = command.run()\n        self.assertEqual(result, 1)\n        self.assertEqual(\n            out_calls, ['could not find a shell named \"unknown_python_shell\"']\n        )\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertTrue(self.bootstrap.closer.called)\n\n    def test_command_loads_ipython_v1_1(self):\n        command = self._makeOne()\n        shell = dummy.DummyShell()\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: shell,\n                'bpython': lambda: bad_shell,\n            }\n        )\n\n        command.options.python_shell = 'ipython'\n\n        command.run()\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_bpython_shell(self):\n        command = self._makeOne()\n        shell = dummy.DummyBPythonShell()\n\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: None,\n                'bpython': lambda: shell,\n            }\n        )\n\n        command.options.python_shell = 'bpython'\n        command.run()\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.locals_, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.banner)\n\n    def test_shell_entry_points(self):\n        command = self._makeOne()\n        dshell = dummy.DummyShell()\n\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: dshell,\n                'bpython': lambda: dhell,\n            }\n        )\n\n        command.make_default_shell = lambda: None\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n\n    def test_shell_ordering(self):\n        command = self._makeOne()\n        ipshell = dummy.DummyShell()\n        bpshell = dummy.DummyShell()\n        dshell = dummy.DummyShell()\n\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: None,\n                'bpython': lambda: None,\n            }\n        )\n\n        command.make_default_shell = lambda: dshell\n\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n\n        command.options.python_shell = 'ipython'\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n\n        command.options.python_shell = 'bpython'\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n\n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: ipshell,\n                'bpython': lambda: bpshell,\n                'python': lambda: dshell,\n            }\n        )\n\n        command.options.python_shell = 'ipython'\n        shell = command.make_shell()\n        self.assertEqual(shell, ipshell)\n\n        command.options.python_shell = 'bpython'\n        shell = command.make_shell()\n        self.assertEqual(shell, bpshell)\n\n        command.options.python_shell = 'python'\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n\n    def test_command_loads_custom_items(self):\n        command = self._makeOne()\n        model = dummy.Dummy()\n        self.config_factory.items = [('m', model)]\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n            'm':model,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_setup(self):\n        command = self._makeOne()\n        def setup(env):\n            env['a'] = 1\n            env['root'] = 'root override'\n        self.config_factory.items = [('setup', setup)]\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':'root override',\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n            'a':1,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_check_variable_override_order(self):\n        command = self._makeOne()\n        model = dummy.Dummy()\n        def setup(env):\n            env['a'] = 1\n            env['m'] = 'model override'\n            env['root'] = 'root override'\n        self.config_factory.items = [('setup', setup), ('m', model)]\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':'root override',\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n            'a':1, 'm':model,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_setup_from_options(self):\n        command = self._makeOne()\n        def setup(env):\n            env['a'] = 1\n            env['root'] = 'root override'\n        model = dummy.Dummy()\n        self.config_factory.items = [('setup', 'abc'),\n                                     ('m', model)]\n        command.options.setup = setup\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':'root override',\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n            'a':1, 'm':model,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_custom_section_override(self):\n        command = self._makeOne()\n        dummy_ = dummy.Dummy()\n        self.config_factory.items = [('app', dummy_), ('root', dummy_),\n                                     ('registry', dummy_), ('request', dummy_)]\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertTrue(self.config_factory.parser)\n        self.assertEqual(self.config_factory.parser.filename,\n                         '/foo/bar/myapp.ini')\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':dummy_, 'root':dummy_, 'registry':dummy_, 'request':dummy_,\n            'root_factory':self.bootstrap.root_factory,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\n    def test_command_loads_pythonstartup(self):\n        command = self._makeOne()\n        command.pystartup = (\n            os.path.abspath(\n                os.path.join(\n                    os.path.dirname(__file__),\n                    'pystartup.txt')))\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n        self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n            'foo':1,\n        })\n        self.assertTrue(self.bootstrap.closer.called)\n        self.assertTrue(shell.help)\n\nclass Test_main(unittest.TestCase):\n    def _callFUT(self, argv):\n        from pyramid.scripts.pshell import main\n        return main(argv, quiet=True)\n\n    def test_it(self):\n        result = self._callFUT(['pshell'])\n        self.assertEqual(result, 2)\n\n"
    ],
    "test_file_names": [
        "test_1.py"
    ],
    "setup_res_code": 0,
    "setup_res_stdout": "",
    "setup_res_stderr": "Using CPython 3.8.20\nCreating virtual environment at: .venv\nActivate with: source .venv/bin/activate\nResolved 9 packages in 659ms\nPrepared 1 package in 973ms\nInstalled 9 packages in 40ms\n + pastedeploy==3.1.0\n + pyramid==1.7.dev0 (from file:///home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_b932a45f834ae6bdb5850a2c58d1317844b32914)\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 21ms\nInstalled 10 packages in 10ms\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 8ms\nInstalled 12 packages in 9ms\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_b932a45f834ae6bdb5850a2c58d1317844b32914\ncollected 956 items\n\nr2e_tests/test_1.py .......F........                                     [  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................................ [ 15%]\n                                                                         [ 15%]\nr2e_tests/test_config/test_factories.py .....................            [ 17%]\nr2e_tests/test_config/test_i18n.py FFF.FF...                             [ 18%]\nr2e_tests/test_config/test_init.py ..................................... [ 22%]\n...F..F.......F.............F...........F.....................FF...FFF.. [ 29%]\n......................                                                   [ 31%]\nr2e_tests/test_config/test_predicates.py ............................... [ 35%]\n........................................                                 [ 39%]\nr2e_tests/test_config/test_rendering.py ...                              [ 39%]\nr2e_tests/test_config/test_routes.py ........................            [ 42%]\nr2e_tests/test_config/test_security.py ..........                        [ 43%]\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........................................................................ [ 67%]\n......FF................................................................ [ 74%]\n...........FF.........F...F....F........................................ [ 82%]\n.........................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______________ TestPShellCommand.test_command_loads_pythonstartup ______________\n\nself = <r2e_tests.test_1.TestPShellCommand testMethod=test_command_loads_pythonstartup>\n\n    def test_command_loads_pythonstartup(self):\n        command = self._makeOne()\n        command.pystartup = (\n            os.path.abspath(\n                os.path.join(\n                    os.path.dirname(__file__),\n                    'pystartup.txt')))\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n>       self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n            'foo':1,\n        })\nE       AssertionError: {'app[70 chars]>, 'registry': <pyramid.tests.test_scripts.dum[281 chars]610>} != {'app[70 chars]>, 'root': <pyramid.tests.test_scripts.dummy.D[291 chars]': 1}\nE         {'app': <pyramid.tests.test_scripts.dummy.DummyApp object at 0x74cc5e795d30>,\nE       +  'foo': 1,\nE          'registry': <pyramid.tests.test_scripts.dummy.DummyRegistry object at 0x74cc5e274580>,\nE          'request': <pyramid.tests.test_scripts.dummy.DummyRequest object at 0x74cc5e274b80>,\nE          'root': <pyramid.tests.test_scripts.dummy.Dummy object at 0x74cc5e274070>,\nE          'root_factory': <pyramid.tests.test_scripts.dummy.Dummy object at 0x74cc5e274610>}\n\nr2e_tests/test_1.py:360: AssertionError\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 0x74cc5e16ea90>, <r2e_tests.test_config.test_adapters.DummyIface object at 0x74cc5e16ea90>)\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 0x74cc5e16ea90>, <r2e_tests.test_config.test_adapters.DummyIface object at 0x74cc5e16ea90>), <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 0x74cc5e280700>\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 0x74cc5e280700>, <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]2914/pyramid/tests/test_config/pkgs/asset/subp[19 chars]r.pt' != '/hom[90 chars]2914/r2e_tests/test_config/pkgs/asset/subpacka[15 chars]r.pt'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_b932a45f834ae6bdb5850a2c58d1317844b32914/pyramid/tests/test_config/pkgs/asset/subpackage/templates/bar.pt\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_b932a45f834ae6bdb5850a2c58d1317844b32914/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]2914/pyramid/tests/test_config/pkgs/asset/subp[19 chars]r.pt' != '/hom[90 chars]2914/r2e_tests/test_config/pkgs/asset/subpacka[15 chars]r.pt'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_b932a45f834ae6bdb5850a2c58d1317844b32914/pyramid/tests/test_config/pkgs/asset/subpackage/templates/bar.pt\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_b932a45f834ae6bdb5850a2c58d1317844b32914/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]2914/pyramid/tests/test_config/pkgs/asset/subp[19 chars]r.pt' != '/hom[90 chars]2914/r2e_tests/test_config/pkgs/asset/subpacka[15 chars]r.pt'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_b932a45f834ae6bdb5850a2c58d1317844b32914/pyramid/tests/test_config/pkgs/asset/subpackage/templates/bar.pt\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_b932a45f834ae6bdb5850a2c58d1317844b32914/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]2914/pyramid/tests/test_config/pkgs/asset/subp[19 chars]r.pt' != '/hom[90 chars]2914/r2e_tests/test_config/pkgs/asset/subpacka[15 chars]r.pt'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_b932a45f834ae6bdb5850a2c58d1317844b32914/pyramid/tests/test_config/pkgs/asset/subpackage/templates/bar.pt\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_b932a45f834ae6bdb5850a2c58d1317844b32914/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]2914/pyramid/tests/test_config/pkgs/asset/subp[19 chars]r.pt' != '/hom[90 chars]2914/r2e_tests/test_config/pkgs/asset/subpacka[15 chars]r.pt'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_b932a45f834ae6bdb5850a2c58d1317844b32914/pyramid/tests/test_config/pkgs/asset/subpackage/templates/bar.pt\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_b932a45f834ae6bdb5850a2c58d1317844b32914/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]50a2c58d1317844b32914/pyramid/tests/test_config/test_assets.py' != '/hom[73 chars]50a2c58d1317844b32914/r2e_tests/test_config/test_assets.py'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_b932a45f834ae6bdb5850a2c58d1317844b32914/pyramid/tests/test_config/test_assets.py\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_b932a45f834ae6bdb5850a2c58d1317844b32914/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]50a2c58d1317844b32914/pyramid/tests/test_config/test_assets.py' != '/hom[73 chars]50a2c58d1317844b32914/r2e_tests/test_config/test_assets.py'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_b932a45f834ae6bdb5850a2c58d1317844b32914/pyramid/tests/test_config/test_assets.py\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_b932a45f834ae6bdb5850a2c58d1317844b32914/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]50a2c58d1317844b32914/pyramid/tests/test_config/test_assets.py' != '/hom[73 chars]50a2c58d1317844b32914/r2e_tests/test_config/test_assets.py'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_b932a45f834ae6bdb5850a2c58d1317844b32914/pyramid/tests/test_config/test_assets.py\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_b932a45f834ae6bdb5850a2c58d1317844b32914/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]50a2c58d1317844b32914/pyramid/tests/test_config/test_assets.py' != '/hom[73 chars]50a2c58d1317844b32914/r2e_tests/test_config/test_assets.py'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_b932a45f834ae6bdb5850a2c58d1317844b32914/pyramid/tests/test_config/test_assets.py\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_b932a45f834ae6bdb5850a2c58d1317844b32914/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:563: in wrapper\n    result = wrapped(self, *arg, **kw)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = <pyramid.config.Configurator object at 0x74cc5e9cf190>\nspecs = ('/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_b932a45f834ae6bdb5850a2c58d1317844b32914/r2e_tests/pkgs/localeapp/locale',)\nintrospectables = []\nspec = '/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_b932a45f834ae6bdb5850a2c58d1317844b32914/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_b932a45f834ae6bdb5850a2c58d1317844b32914/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]db5850a2c58d1317844b32914/pyramid/tests/pkgs/localeapp/locale'] != ['/ho[70 chars]db5850a2c58d1317844b32914/r2e_tests/pkgs/localeapp/locale']\nE       \nE       First differing element 0:\nE       '/hom[68 chars]bdb5850a2c58d1317844b32914/pyramid/tests/pkgs/localeapp/locale'\nE       '/hom[68 chars]bdb5850a2c58d1317844b32914/r2e_tests/pkgs/localeapp/locale'\nE       \nE       - ['/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_b932a45f834ae6bdb5850a2c58d1317844b32914/pyramid/tests/pkgs/localeapp/locale']\nE       ?                                                                                                      -- ^^^^^\nE       \nE       + ['/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_b932a45f834ae6bdb5850a2c58d1317844b32914/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]2c58d1317844b32914/pyramid/tests/pkgs/localeapp/locale', 'abc'] != ['/ho[77 chars]2c58d1317844b32914/r2e_tests/pkgs/localeapp/locale', 'abc']\nE       \nE       First differing element 0:\nE       '/hom[68 chars]bdb5850a2c58d1317844b32914/pyramid/tests/pkgs/localeapp/locale'\nE       '/hom[68 chars]bdb5850a2c58d1317844b32914/r2e_tests/pkgs/localeapp/locale'\nE       \nE       - ['/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_b932a45f834ae6bdb5850a2c58d1317844b32914/pyramid/tests/pkgs/localeapp/locale',\nE       ?                                                                                                      -- ^^^^^\nE       \nE       + ['/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_b932a45f834ae6bdb5850a2c58d1317844b32914/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]2914/pyramid/tests/pkgs/localeapp/locale', '/h[130 chars]le2'] != ['/ho[91 chars]2914/r2e_tests/pkgs/localeapp/locale', '/home/[122 chars]le2']\nE       \nE       First differing element 0:\nE       '/hom[68 chars]bdb5850a2c58d1317844b32914/pyramid/tests/pkgs/localeapp/locale'\nE       '/hom[68 chars]bdb5850a2c58d1317844b32914/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]2914/pyramid/tests/pkgs/localeapp/locale3', '/[269 chars]le2'] != ['/ho[91 chars]2914/r2e_tests/pkgs/localeapp/locale3', '/home[257 chars]le2']\nE       \nE       First differing element 0:\nE       '/hom[69 chars]db5850a2c58d1317844b32914/pyramid/tests/pkgs/localeapp/locale3'\nE       '/hom[69 chars]db5850a2c58d1317844b32914/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 0x74cc5e52cd30>, 'discriminat...cc5e3165e0>, '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_b932a45f834ae6bdb5850a2c58d1317844b32914/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_b932a45f834ae6bdb5850a2c58d1317844b32914/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_b932a45f834ae6bdb5850a2c58d1317844b32914/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_b932a45f834ae6bdb5850a2c58d1317844b32914/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]4cc5e51cb50>, 'static', 'r2e_tests.test_config:files', {})] != [(<py[39 chars]4cc5e51cb50>, 'static', 'pyramid.tests.test_config:files', {})]\nE       \nE       First differing element 0:\nE       (<pyr[37 chars]74cc5e51cb50>, 'static', 'r2e_tests.test_config:files', {})\nE       (<pyr[37 chars]74cc5e51cb50>, 'static', 'pyramid.tests.test_config:files', {})\nE       \nE         [(<pyramid.config.Configurator object at 0x74cc5e51cb50>,\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:1841: 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:1142: 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:1183: 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:2506: \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:412: 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:2508: 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:2525: \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:412: 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:2527: 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:2546: \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 0x74cc5e25dd60> 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:412: 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:2549: 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:2592: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\ncontext = None\nrequest = <r2e_tests.test_config.test_views.DummyRequest object at 0x74cc5e418d30>\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:412: 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:2594: 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:2616: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\ncontext = None\nrequest = <r2e_tests.test_config.test_views.DummyRequest object at 0x74cc5e16bc70>\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:412: 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:2618: 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:4149: 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::TestPShellCommand::test_command_custom_section_override\nPASSED r2e_tests/test_1.py::TestPShellCommand::test_command_loads_bpython_shell\nPASSED r2e_tests/test_1.py::TestPShellCommand::test_command_loads_check_variable_override_order\nPASSED r2e_tests/test_1.py::TestPShellCommand::test_command_loads_custom_items\nPASSED r2e_tests/test_1.py::TestPShellCommand::test_command_loads_default_shell\nPASSED r2e_tests/test_1.py::TestPShellCommand::test_command_loads_default_shell_with_unknown_shell\nPASSED r2e_tests/test_1.py::TestPShellCommand::test_command_loads_ipython_v1_1\nPASSED r2e_tests/test_1.py::TestPShellCommand::test_command_loads_setup_from_options\nPASSED r2e_tests/test_1.py::TestPShellCommand::test_command_setup\nPASSED r2e_tests/test_1.py::TestPShellCommand::test_make_bpython_shell\nPASSED r2e_tests/test_1.py::TestPShellCommand::test_make_default_shell\nPASSED r2e_tests/test_1.py::TestPShellCommand::test_make_ipython_v1_1_shell\nPASSED r2e_tests/test_1.py::TestPShellCommand::test_shell_entry_points\nPASSED r2e_tests/test_1.py::TestPShellCommand::test_shell_ordering\nPASSED r2e_tests/test_1.py::Test_main::test_it\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_withval\nPASSED r2e_tests/test_config/test_predicates.py::TestRequestParamPredicate::test_text_exists\nPASSED r2e_tests/test_config/test_predicates.py::TestRequestParamPredicate::test_text_multi\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_custom\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_cachebust_default\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_cachebust_prevented\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_registration_no_registry_on_request\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_route_url\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_slash_in_name1\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_slash_in_name2\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_url_cachebust\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_loads_bpython_shell\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_loads_check_variable_override_order\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_loads_custom_items\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_loads_default_shell\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_loads_default_shell_with_unknown_shell\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_loads_ipython_v1_1\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_make_bpython_shell\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_make_default_shell\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_make_ipython_v1_1_shell\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::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::TestPShellCommand::test_command_loads_pythonstartup\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::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, 891 passed in 5.36s ========================\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_b932a45f834ae6bdb5850a2c58d1317844b32914\ncollected 956 items\n\nr2e_tests/test_1.py .....F.F......F.                                     [  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................................ [ 15%]\n                                                                         [ 15%]\nr2e_tests/test_config/test_factories.py .....................            [ 17%]\nr2e_tests/test_config/test_i18n.py FFF.FF...                             [ 18%]\nr2e_tests/test_config/test_init.py ..................................... [ 22%]\n...F..F.......F.............F...........F.....................FF...FFF.. [ 29%]\n......................                                                   [ 31%]\nr2e_tests/test_config/test_predicates.py ............................... [ 35%]\n........................................                                 [ 39%]\nr2e_tests/test_config/test_rendering.py ...                              [ 39%]\nr2e_tests/test_config/test_routes.py ........................            [ 42%]\nr2e_tests/test_config/test_security.py ..........                        [ 43%]\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........................................................................ [ 67%]\n......FF................................................................ [ 74%]\n...........FF.........F...F....F........................................ [ 82%]\n.........................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 .....F........F.                   [ 97%]\nr2e_tests/test_scripts/test_ptweens.py .....                             [ 97%]\nr2e_tests/test_scripts/test_pviews.py ................F......            [100%]\n\n=================================== FAILURES ===================================\n____ TestPShellCommand.test_command_loads_default_shell_with_unknown_shell _____\n\nself = <r2e_tests.test_1.TestPShellCommand testMethod=test_command_loads_default_shell_with_unknown_shell>\n\n    def test_command_loads_default_shell_with_unknown_shell(self):\n        command = self._makeOne()\n        out_calls = []\n    \n        def out(msg):\n            out_calls.append(msg)\n    \n        command.out = out\n    \n        shell = dummy.DummyShell()\n        bad_shell = dummy.DummyShell()\n    \n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: bad_shell,\n                'bpython': lambda: bad_shell,\n            }\n        )\n    \n        command.make_default_shell = lambda: shell\n        command.options.python_shell = 'unknown_python_shell'\n        result = command.run()\n>       self.assertEqual(result, 1)\nE       AssertionError: None != 1\n\nr2e_tests/test_1.py:113: AssertionError\n______________ TestPShellCommand.test_command_loads_pythonstartup ______________\n\nself = <r2e_tests.test_1.TestPShellCommand testMethod=test_command_loads_pythonstartup>\n\n    def test_command_loads_pythonstartup(self):\n        command = self._makeOne()\n        command.pystartup = (\n            os.path.abspath(\n                os.path.join(\n                    os.path.dirname(__file__),\n                    'pystartup.txt')))\n        shell = dummy.DummyShell()\n        command.run(shell)\n        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')\n>       self.assertEqual(shell.env, {\n            'app':self.bootstrap.app, 'root':self.bootstrap.root,\n            'registry':self.bootstrap.registry,\n            'request':self.bootstrap.request,\n            'root_factory':self.bootstrap.root_factory,\n            'foo':1,\n        })\nE       AssertionError: {'app[70 chars]>, 'registry': <pyramid.tests.test_scripts.dum[281 chars]c10>} != {'app[70 chars]>, 'root': <pyramid.tests.test_scripts.dummy.D[291 chars]': 1}\nE         {'app': <pyramid.tests.test_scripts.dummy.DummyApp object at 0x7d5d2108ff70>,\nE       +  'foo': 1,\nE          'registry': <pyramid.tests.test_scripts.dummy.DummyRegistry object at 0x7d5d2102b7f0>,\nE          'request': <pyramid.tests.test_scripts.dummy.DummyRequest object at 0x7d5d2102bac0>,\nE          'root': <pyramid.tests.test_scripts.dummy.Dummy object at 0x7d5d2102b160>,\nE          'root_factory': <pyramid.tests.test_scripts.dummy.Dummy object at 0x7d5d2102bc10>}\n\nr2e_tests/test_1.py:360: AssertionError\n____________________ TestPShellCommand.test_shell_ordering _____________________\n\nself = <r2e_tests.test_1.TestPShellCommand testMethod=test_shell_ordering>\n\n    def test_shell_ordering(self):\n        command = self._makeOne()\n        ipshell = dummy.DummyShell()\n        bpshell = dummy.DummyShell()\n        dshell = dummy.DummyShell()\n    \n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: None,\n                'bpython': lambda: None,\n            }\n        )\n    \n        command.make_default_shell = lambda: dshell\n    \n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n    \n        command.options.python_shell = 'ipython'\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n    \n        command.options.python_shell = 'bpython'\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n    \n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: ipshell,\n                'bpython': lambda: bpshell,\n                'python': lambda: dshell,\n            }\n        )\n    \n        command.options.python_shell = 'ipython'\n>       shell = command.make_shell()\n\nr2e_tests/test_1.py:230: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \npyramid/scripts/pshell.py:174: in make_shell\n    sorted_shells = sorted(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nx = ('python', <function TestPShellCommand.test_shell_ordering.<locals>.<lambda> at 0x7d5d21040dc0>)\n\n>       shells.items(), key=lambda x: priority_order.index(x[0])\n    )\nE   ValueError: 'python' is not in list\n\npyramid/scripts/pshell.py:175: ValueError\n__ AdaptersConfiguratorMixinTests.test_add_resource_url_adapter_dotted_names ___\n\nself = <r2e_tests.test_config.test_adapters.AdaptersConfiguratorMixinTests testMethod=test_add_resource_url_adapter_dotted_names>\n\n    def test_add_resource_url_adapter_dotted_names(self):\n        from pyramid.interfaces import IResourceURL\n        config = self._makeOne(autocommit=True)\n        config.add_resource_url_adapter(\n            'pyramid.tests.test_config.test_adapters.DummyResourceURL',\n            'pyramid.tests.test_config.test_adapters.DummyIface',\n            )\n        iface = DummyIface()\n>       adapter = config.registry.getMultiAdapter((iface, iface),\n                                                    IResourceURL)\n\nr2e_tests/test_config/test_adapters.py:280: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = <Registry r2e_tests.test_config>\nobjects = (<r2e_tests.test_config.test_adapters.DummyIface object at 0x7d5d20f46e50>, <r2e_tests.test_config.test_adapters.DummyIface object at 0x7d5d20f46e50>)\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 0x7d5d20f46e50>, <r2e_tests.test_config.test_adapters.DummyIface object at 0x7d5d20f46e50>), <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 0x7d5d20f18040>\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 0x7d5d20f18040>, <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]2914/pyramid/tests/test_config/pkgs/asset/subp[19 chars]r.pt' != '/hom[90 chars]2914/r2e_tests/test_config/pkgs/asset/subpacka[15 chars]r.pt'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_b932a45f834ae6bdb5850a2c58d1317844b32914/pyramid/tests/test_config/pkgs/asset/subpackage/templates/bar.pt\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_b932a45f834ae6bdb5850a2c58d1317844b32914/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]2914/pyramid/tests/test_config/pkgs/asset/subp[19 chars]r.pt' != '/hom[90 chars]2914/r2e_tests/test_config/pkgs/asset/subpacka[15 chars]r.pt'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_b932a45f834ae6bdb5850a2c58d1317844b32914/pyramid/tests/test_config/pkgs/asset/subpackage/templates/bar.pt\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_b932a45f834ae6bdb5850a2c58d1317844b32914/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]2914/pyramid/tests/test_config/pkgs/asset/subp[19 chars]r.pt' != '/hom[90 chars]2914/r2e_tests/test_config/pkgs/asset/subpacka[15 chars]r.pt'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_b932a45f834ae6bdb5850a2c58d1317844b32914/pyramid/tests/test_config/pkgs/asset/subpackage/templates/bar.pt\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_b932a45f834ae6bdb5850a2c58d1317844b32914/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]2914/pyramid/tests/test_config/pkgs/asset/subp[19 chars]r.pt' != '/hom[90 chars]2914/r2e_tests/test_config/pkgs/asset/subpacka[15 chars]r.pt'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_b932a45f834ae6bdb5850a2c58d1317844b32914/pyramid/tests/test_config/pkgs/asset/subpackage/templates/bar.pt\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_b932a45f834ae6bdb5850a2c58d1317844b32914/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]2914/pyramid/tests/test_config/pkgs/asset/subp[19 chars]r.pt' != '/hom[90 chars]2914/r2e_tests/test_config/pkgs/asset/subpacka[15 chars]r.pt'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_b932a45f834ae6bdb5850a2c58d1317844b32914/pyramid/tests/test_config/pkgs/asset/subpackage/templates/bar.pt\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_b932a45f834ae6bdb5850a2c58d1317844b32914/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]50a2c58d1317844b32914/pyramid/tests/test_config/test_assets.py' != '/hom[73 chars]50a2c58d1317844b32914/r2e_tests/test_config/test_assets.py'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_b932a45f834ae6bdb5850a2c58d1317844b32914/pyramid/tests/test_config/test_assets.py\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_b932a45f834ae6bdb5850a2c58d1317844b32914/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]50a2c58d1317844b32914/pyramid/tests/test_config/test_assets.py' != '/hom[73 chars]50a2c58d1317844b32914/r2e_tests/test_config/test_assets.py'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_b932a45f834ae6bdb5850a2c58d1317844b32914/pyramid/tests/test_config/test_assets.py\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_b932a45f834ae6bdb5850a2c58d1317844b32914/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]50a2c58d1317844b32914/pyramid/tests/test_config/test_assets.py' != '/hom[73 chars]50a2c58d1317844b32914/r2e_tests/test_config/test_assets.py'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_b932a45f834ae6bdb5850a2c58d1317844b32914/pyramid/tests/test_config/test_assets.py\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_b932a45f834ae6bdb5850a2c58d1317844b32914/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]50a2c58d1317844b32914/pyramid/tests/test_config/test_assets.py' != '/hom[73 chars]50a2c58d1317844b32914/r2e_tests/test_config/test_assets.py'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_b932a45f834ae6bdb5850a2c58d1317844b32914/pyramid/tests/test_config/test_assets.py\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_b932a45f834ae6bdb5850a2c58d1317844b32914/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:563: in wrapper\n    result = wrapped(self, *arg, **kw)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = <pyramid.config.Configurator object at 0x7d5d21514310>\nspecs = ('/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_b932a45f834ae6bdb5850a2c58d1317844b32914/r2e_tests/pkgs/localeapp/locale',)\nintrospectables = []\nspec = '/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_b932a45f834ae6bdb5850a2c58d1317844b32914/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_b932a45f834ae6bdb5850a2c58d1317844b32914/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]db5850a2c58d1317844b32914/pyramid/tests/pkgs/localeapp/locale'] != ['/ho[70 chars]db5850a2c58d1317844b32914/r2e_tests/pkgs/localeapp/locale']\nE       \nE       First differing element 0:\nE       '/hom[68 chars]bdb5850a2c58d1317844b32914/pyramid/tests/pkgs/localeapp/locale'\nE       '/hom[68 chars]bdb5850a2c58d1317844b32914/r2e_tests/pkgs/localeapp/locale'\nE       \nE       - ['/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_b932a45f834ae6bdb5850a2c58d1317844b32914/pyramid/tests/pkgs/localeapp/locale']\nE       ?                                                                                                      -- ^^^^^\nE       \nE       + ['/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_b932a45f834ae6bdb5850a2c58d1317844b32914/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]2c58d1317844b32914/pyramid/tests/pkgs/localeapp/locale', 'abc'] != ['/ho[77 chars]2c58d1317844b32914/r2e_tests/pkgs/localeapp/locale', 'abc']\nE       \nE       First differing element 0:\nE       '/hom[68 chars]bdb5850a2c58d1317844b32914/pyramid/tests/pkgs/localeapp/locale'\nE       '/hom[68 chars]bdb5850a2c58d1317844b32914/r2e_tests/pkgs/localeapp/locale'\nE       \nE       - ['/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_b932a45f834ae6bdb5850a2c58d1317844b32914/pyramid/tests/pkgs/localeapp/locale',\nE       ?                                                                                                      -- ^^^^^\nE       \nE       + ['/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_b932a45f834ae6bdb5850a2c58d1317844b32914/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]2914/pyramid/tests/pkgs/localeapp/locale', '/h[130 chars]le2'] != ['/ho[91 chars]2914/r2e_tests/pkgs/localeapp/locale', '/home/[122 chars]le2']\nE       \nE       First differing element 0:\nE       '/hom[68 chars]bdb5850a2c58d1317844b32914/pyramid/tests/pkgs/localeapp/locale'\nE       '/hom[68 chars]bdb5850a2c58d1317844b32914/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]2914/pyramid/tests/pkgs/localeapp/locale3', '/[269 chars]le2'] != ['/ho[91 chars]2914/r2e_tests/pkgs/localeapp/locale3', '/home[257 chars]le2']\nE       \nE       First differing element 0:\nE       '/hom[69 chars]db5850a2c58d1317844b32914/pyramid/tests/pkgs/localeapp/locale3'\nE       '/hom[69 chars]db5850a2c58d1317844b32914/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 0x7d5d20e7cb80>, 'discriminat...5d20e7a040>, '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_b932a45f834ae6bdb5850a2c58d1317844b32914/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_b932a45f834ae6bdb5850a2c58d1317844b32914/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_b932a45f834ae6bdb5850a2c58d1317844b32914/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_b932a45f834ae6bdb5850a2c58d1317844b32914/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]d5d20b26940>, 'static', 'r2e_tests.test_config:files', {})] != [(<py[39 chars]d5d20b26940>, 'static', 'pyramid.tests.test_config:files', {})]\nE       \nE       First differing element 0:\nE       (<pyr[37 chars]7d5d20b26940>, 'static', 'r2e_tests.test_config:files', {})\nE       (<pyr[37 chars]7d5d20b26940>, 'static', 'pyramid.tests.test_config:files', {})\nE       \nE         [(<pyramid.config.Configurator object at 0x7d5d20b26940>,\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:1841: 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:1142: 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:1183: 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:2506: \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:412: 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:2508: 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:2525: \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:412: 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:2527: 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:2546: \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 0x7d5d2114dcd0> 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:412: 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:2549: 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:2592: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\ncontext = None\nrequest = <r2e_tests.test_config.test_views.DummyRequest object at 0x7d5d2056f670>\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:412: 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:2594: 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:2616: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\ncontext = None\nrequest = <r2e_tests.test_config.test_views.DummyRequest object at 0x7d5d20f1e6a0>\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:412: 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:2618: 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:4149: 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____ TestPShellCommand.test_command_loads_default_shell_with_unknown_shell _____\n\nself = <r2e_tests.test_scripts.test_pshell.TestPShellCommand testMethod=test_command_loads_default_shell_with_unknown_shell>\n\n    def test_command_loads_default_shell_with_unknown_shell(self):\n        command = self._makeOne()\n        out_calls = []\n    \n        def out(msg):\n            out_calls.append(msg)\n    \n        command.out = out\n    \n        shell = dummy.DummyShell()\n        bad_shell = dummy.DummyShell()\n    \n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: bad_shell,\n                'bpython': lambda: bad_shell,\n            }\n        )\n    \n        command.make_default_shell = lambda: shell\n        command.options.python_shell = 'unknown_python_shell'\n        result = command.run()\n>       self.assertEqual(result, 1)\nE       AssertionError: None != 1\n\nr2e_tests/test_scripts/test_pshell.py:113: AssertionError\n____________________ TestPShellCommand.test_shell_ordering _____________________\n\nself = <r2e_tests.test_scripts.test_pshell.TestPShellCommand testMethod=test_shell_ordering>\n\n    def test_shell_ordering(self):\n        command = self._makeOne()\n        ipshell = dummy.DummyShell()\n        bpshell = dummy.DummyShell()\n        dshell = dummy.DummyShell()\n    \n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: None,\n                'bpython': lambda: None,\n            }\n        )\n    \n        command.make_default_shell = lambda: dshell\n    \n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n    \n        command.options.python_shell = 'ipython'\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n    \n        command.options.python_shell = 'bpython'\n        shell = command.make_shell()\n        self.assertEqual(shell, dshell)\n    \n        self._makeEntryPoints(\n            command,\n            {\n                'ipython': lambda: ipshell,\n                'bpython': lambda: bpshell,\n                'python': lambda: dshell,\n            }\n        )\n    \n        command.options.python_shell = 'ipython'\n>       shell = command.make_shell()\n\nr2e_tests/test_scripts/test_pshell.py:230: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \npyramid/scripts/pshell.py:174: in make_shell\n    sorted_shells = sorted(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nx = ('python', <function TestPShellCommand.test_shell_ordering.<locals>.<lambda> at 0x7d5d208723a0>)\n\n>       shells.items(), key=lambda x: priority_order.index(x[0])\n    )\nE   ValueError: 'python' is not in list\n\npyramid/scripts/pshell.py:175: ValueError\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::TestPShellCommand::test_command_custom_section_override\nPASSED r2e_tests/test_1.py::TestPShellCommand::test_command_loads_bpython_shell\nPASSED r2e_tests/test_1.py::TestPShellCommand::test_command_loads_check_variable_override_order\nPASSED r2e_tests/test_1.py::TestPShellCommand::test_command_loads_custom_items\nPASSED r2e_tests/test_1.py::TestPShellCommand::test_command_loads_default_shell\nPASSED r2e_tests/test_1.py::TestPShellCommand::test_command_loads_ipython_v1_1\nPASSED r2e_tests/test_1.py::TestPShellCommand::test_command_loads_setup_from_options\nPASSED r2e_tests/test_1.py::TestPShellCommand::test_command_setup\nPASSED r2e_tests/test_1.py::TestPShellCommand::test_make_bpython_shell\nPASSED r2e_tests/test_1.py::TestPShellCommand::test_make_default_shell\nPASSED r2e_tests/test_1.py::TestPShellCommand::test_make_ipython_v1_1_shell\nPASSED r2e_tests/test_1.py::TestPShellCommand::test_shell_entry_points\nPASSED r2e_tests/test_1.py::Test_main::test_it\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_withval\nPASSED r2e_tests/test_config/test_predicates.py::TestRequestParamPredicate::test_text_exists\nPASSED r2e_tests/test_config/test_predicates.py::TestRequestParamPredicate::test_text_multi\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_custom\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_cachebust_default\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_cachebust_prevented\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_registration_no_registry_on_request\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_route_url\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_slash_in_name1\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_slash_in_name2\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_url_cachebust\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_loads_bpython_shell\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_loads_check_variable_override_order\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_loads_custom_items\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_loads_default_shell\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_loads_ipython_v1_1\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_make_bpython_shell\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_make_default_shell\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_make_ipython_v1_1_shell\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_shell_entry_points\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::TestPShellCommand::test_command_loads_default_shell_with_unknown_shell\nFAILED r2e_tests/test_1.py::TestPShellCommand::test_command_loads_pythonstartup\nFAILED r2e_tests/test_1.py::TestPShellCommand::test_shell_ordering - ValueErr...\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::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_pshell.py::TestPShellCommand::test_command_loads_default_shell_with_unknown_shell\nFAILED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_shell_ordering\nFAILED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_single_view_function_traversal\n======================== 69 failed, 887 passed in 4.63s ========================\n",
    "old_commit_res_stderr": ""
}
docs/narr/commandline.rst pyramid/scripts/pshell.py pyramid/tests/test_scripts/test_pshell.py
We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
**Analysis:**

- **Key Parts:**
  - The commit modifies the `pshell.py` script to handle specific shells more gracefully.
  - Before the commit, the test `test_command_loads_default_shell_with_unknown_shell` failed because `command.run()` returned `None` instead of `1` when an unknown shell was specified.
  - The change in the commit ensures that when an unknown shell is passed, a `ValueError` is raised, an error message is outputted, and the command returns `1`.

- **Main Problem:**
  When an unknown shell is specified, the `PShellCommand` does not return the expected error status and fails to notify the user appropriately.

- **Expected Behavior:**
  The command should return a status code of `1` and display an error message indicating that the specified shell is not recognized.

- **Actual Behavior:**
  The command returns `None` instead of `1`, and the error message is not properly handled or displayed.

- **Issue Description:**
  The issue revolves around improper handling of unknown shells in the `PShellCommand`, leading to unexpected behavior and inadequate user feedback.

---

[ISSUE]

**Title:** PShellCommand.run() Does Not Return Error Status for Unknown Shells

**Description:**
When an unknown shell is specified for the `PShellCommand`, the command does not return the expected error status code and fails to inform the user about the unrecognized shell. This results in `None` being returned instead of the expected status code `1`.

**Example Code:**
```python
command = PShellCommand()
command.options.python_shell = 'unknown_python_shell'
result = command.run()
# Expected result: 1
# Actual result: None
```

**Expected Behavior:**
The command should return a status code of `1` and display an error message indicating that the specified shell `'unknown_python_shell'` is not recognized.

**Actual Behavior:**
The command returns `None` without providing a clear error message, making it difficult to understand why the shell failed to initialize.

[/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/scripts/pshell.py
from code import interact
import optparse
import os
import sys
import textwrap
import pkg_resources

from pyramid.compat import configparser
from pyramid.compat import exec_
from pyramid.util import DottedNameResolver
from pyramid.paster import bootstrap

from pyramid.paster import setup_logging

from pyramid.scripts.common import parse_vars

def main(argv=sys.argv, quiet=False):
    command = PShellCommand(argv, quiet)
    return command.run()


class PShellCommand(object):
    usage = '%prog config_uri'
    description = """\
    Open an interactive shell with a Pyramid app loaded.  This command
    accepts one positional argument named "config_uri" which specifies the
    PasteDeploy config file to use for the interactive shell. The format is
    "inifile#name". If the name is left off, the Pyramid default application
    will be assumed.  Example: "pshell myapp.ini#main"

    If you do not point the loader directly at the section of the ini file
    containing your Pyramid application, the command will attempt to
    find the app for you. If you are loading a pipeline that contains more
    than one Pyramid application within it, the loader will use the
    last one.
    """
    bootstrap = (bootstrap,)  # for testing
    pkg_resources = pkg_resources  # for testing

    parser = optparse.OptionParser(
        usage,
        description=textwrap.dedent(description)
        )
    parser.add_option('-p', '--python-shell',
                      action='store', type='string', dest='python_shell',
                      default='', help='ipython | bpython | python')
    parser.add_option('--setup',
                      dest='setup',
                      help=("A callable that will be passed the environment "
                            "before it is made available to the shell. This "
                            "option will override the 'setup' key in the "
                            "[pshell] ini section."))

    ConfigParser = configparser.ConfigParser # testing

    loaded_objects = {}
    object_help = {}
    setup = None
    pystartup = os.environ.get('PYTHONSTARTUP')

    def __init__(self, argv, quiet=False):
        self.quiet = quiet
        self.options, self.args = self.parser.parse_args(argv[1:])

    def pshell_file_config(self, filename):
        config = self.ConfigParser()
        config.read(filename)
        try:
            items = config.items('pshell')
        except configparser.NoSectionError:
            return

        resolver = DottedNameResolver(None)
        self.loaded_objects = {}
        self.object_help = {}
        self.setup = None
        for k, v in items:
            if k == 'setup':
                self.setup = v
            else:
                self.loaded_objects[k] = resolver.maybe_resolve(v)
                self.object_help[k] = v

    def out(self, msg): # pragma: no cover
        if not self.quiet:
            print(msg)

    def run(self, shell=None):
        if not self.args:
            self.out('Requires a config file argument')
            return 2
        config_uri = self.args[0]
        config_file = config_uri.split('#', 1)[0]
        setup_logging(config_file)
        self.pshell_file_config(config_file)

        # bootstrap the environ
        env = self.bootstrap[0](config_uri, options=parse_vars(self.args[1:]))

        # remove the closer from the env
        closer = env.pop('closer')

        # setup help text for default environment
        env_help = dict(env)
        env_help['app'] = 'The WSGI application.'
        env_help['root'] = 'Root of the default resource tree.'
        env_help['registry'] = 'Active Pyramid registry.'
        env_help['request'] = 'Active request object.'
        env_help['root_factory'] = (
            'Default root factory used to create `root`.')

        # override use_script with command-line options
        if self.options.setup:
            self.setup = self.options.setup

        if self.setup:
            # store the env before muddling it with the script
            orig_env = env.copy()

            # call the setup callable
            resolver = DottedNameResolver(None)
            setup = resolver.maybe_resolve(self.setup)
            setup(env)

            # remove any objects from default help that were overidden
            for k, v in env.items():
                if k not in orig_env or env[k] != orig_env[k]:
                    env_help[k] = v

        # load the pshell section of the ini file
        env.update(self.loaded_objects)

        # eliminate duplicates from env, allowing custom vars to override
        for k in self.loaded_objects:
            if k in env_help:
                del env_help[k]

        # generate help text
        help = ''
        if env_help:
            help += 'Environment:'
            for var in sorted(env_help.keys()):
                help += '\n  %-12s %s' % (var, env_help[var])

        if self.object_help:
            help += '\n\nCustom Variables:'
            for var in sorted(self.object_help.keys()):
                help += '\n  %-12s %s' % (var, self.object_help[var])

        if shell is None:
            shell = self.make_shell()

        if self.pystartup and os.path.isfile(self.pystartup):
            with open(self.pystartup, 'rb') as fp:
                exec_(fp.read().decode('utf-8'), env)
            if '__builtins__' in env:
                del env['__builtins__']

        try:
            shell(env, help)
        finally:
            closer()

    def make_shell(self):
        shells = {}

        priority_order = ['ipython', 'bpython']

        for ep in self.pkg_resources.iter_entry_points('pyramid.pshell'):
            name = ep.name
            shell_module = ep.load()
            shells[name] = shell_module

        sorted_shells = sorted(
            shells.items(), key=lambda x: priority_order.index(x[0])
        )

        shell = None
        user_shell = self.options.python_shell.lower()

        if not user_shell:
            for name, factory in sorted_shells:
                shell = factory()

                if shell is not None:
                    break
        else:
            factory = shells.get(user_shell)

            if factory is not None:
                shell = factory()

        if shell is None:
            shell = self.make_default_shell()

        return shell

    def make_default_shell(self, interact=interact):
        def shell(env, help):
            cprt = 'Type "help" for more information.'
            banner = "Python %s on %s\n%s" % (sys.version, sys.platform, cprt)
            banner += '\n\n' + help + '\n'
            interact(banner, local=env)
        return shell

    @classmethod
    def make_bpython_shell(cls, BPShell=None):
        if BPShell is None: # pragma: no cover
            try:
                from bpython import embed
                BPShell = embed
            except ImportError:
                return None
        def shell(env, help):
            BPShell(locals_=env, banner=help + '\n')
        return shell

    @classmethod
    def make_ipython_shell(cls, IPShellFactory=None):
        if IPShellFactory is None: # pragma: no cover
            try:
                from IPython.terminal.embed import (
                    InteractiveShellEmbed)
                IPShellFactory = InteractiveShellEmbed
            except ImportError:
                return None
        def shell(env, help):
            IPShell = IPShellFactory(banner2=help + '\n', user_ns=env)
            IPShell()
        return shell


if __name__ == '__main__': # pragma: no cover
    sys.exit(main() or 0)

```
--- 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.
**Analysis:**

- **Key Parts:**
  - The commit modifies the `pshell.py` script to handle specific shells more gracefully.
  - Before the commit, the test `test_command_loads_default_shell_with_unknown_shell` failed because `command.run()` returned `None` instead of `1` when an unknown shell was specified.
  - The change in the commit ensures that when an unknown shell is passed, a `ValueError` is raised, an error message is outputted, and the command returns `1`.

- **Main Problem:**
  When an unknown shell is specified, the `PShellCommand` does not return the expected error status and fails to notify the user appropriately.

- **Expected Behavior:**
  The command should return a status code of `1` and display an error message indicating that the specified shell is not recognized.

- **Actual Behavior:**
  The command returns `None` instead of `1`, and the error message is not properly handled or displayed.

- **Issue Description:**
  The issue revolves around improper handling of unknown shells in the `PShellCommand`, leading to unexpected behavior and inadequate user feedback.

---

[ISSUE]

**Title:** PShellCommand.run() Does Not Return Error Status for Unknown Shells

**Description:**
When an unknown shell is specified for the `PShellCommand`, the command does not return the expected error status code and fails to inform the user about the unrecognized shell. This results in `None` being returned instead of the expected status code `1`.

**Example Code:**
```python
command = PShellCommand()
command.options.python_shell = 'unknown_python_shell'
result = command.run()
# Expected result: 1
# Actual result: None
```

**Expected Behavior:**
The command should return a status code of `1` and display an error message indicating that the specified shell `'unknown_python_shell'` is not recognized.

**Actual Behavior:**
The command returns `None` without providing a clear error message, making it difficult to understand why the shell failed to initialize.

[/ISSUE]
{
    "TestPShellCommand.test_command_custom_section_override": "PASSED",
    "TestPShellCommand.test_command_loads_bpython_shell": "PASSED",
    "TestPShellCommand.test_command_loads_check_variable_override_order": "PASSED",
    "TestPShellCommand.test_command_loads_custom_items": "PASSED",
    "TestPShellCommand.test_command_loads_default_shell": "PASSED",
    "TestPShellCommand.test_command_loads_default_shell_with_unknown_shell": "PASSED",
    "TestPShellCommand.test_command_loads_ipython_v1_1": "PASSED",
    "TestPShellCommand.test_command_loads_setup_from_options": "PASSED",
    "TestPShellCommand.test_command_setup": "PASSED",
    "TestPShellCommand.test_make_bpython_shell": "PASSED",
    "TestPShellCommand.test_make_default_shell": "PASSED",
    "TestPShellCommand.test_make_ipython_v1_1_shell": "PASSED",
    "TestPShellCommand.test_shell_entry_points": "PASSED",
    "TestPShellCommand.test_shell_ordering": "PASSED",
    "Test_main.test_it": "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_withval": "PASSED",
    "TestRequestParamPredicate.test_text_exists": "PASSED",
    "TestRequestParamPredicate.test_text_multi": "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_custom": "PASSED",
    "TestStaticURLInfo.test_add_cachebust_default": "PASSED",
    "TestStaticURLInfo.test_add_cachebust_prevented": "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_registration_no_registry_on_request": "PASSED",
    "TestStaticURLInfo.test_generate_route_url": "PASSED",
    "TestStaticURLInfo.test_generate_slash_in_name1": "PASSED",
    "TestStaticURLInfo.test_generate_slash_in_name2": "PASSED",
    "TestStaticURLInfo.test_generate_url_cachebust": "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",
    "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_loads_pythonstartup": "FAILED",
    "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",
    "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/scripts/pshell.py b/pyramid/scripts/pshell.py
index 563418302..9c2573caa 100644
--- a/pyramid/scripts/pshell.py
+++ b/pyramid/scripts/pshell.py
@@ -98,7 +98,7 @@ class PShellCommand(object):
         env = self.bootstrap[0](config_uri, options=parse_vars(self.args[1:]))
 
         # remove the closer from the env
-        closer = env.pop('closer')
+        self.closer = env.pop('closer')
 
         # setup help text for default environment
         env_help = dict(env)
@@ -148,7 +148,12 @@ class PShellCommand(object):
                 help += '\n  %-12s %s' % (var, self.object_help[var])
 
         if shell is None:
-            shell = self.make_shell()
+            try:
+                shell = self.make_shell()
+            except ValueError as e:
+                self.out(str(e))
+                self.closer()
+                return 1
 
         if self.pystartup and os.path.isfile(self.pystartup):
             with open(self.pystartup, 'rb') as fp:
@@ -159,12 +164,12 @@ class PShellCommand(object):
         try:
             shell(env, help)
         finally:
-            closer()
+            self.closer()
 
     def make_shell(self):
         shells = {}
 
-        priority_order = ['ipython', 'bpython']
+        priority_order = ['ipython', 'bpython', 'python']
 
         for ep in self.pkg_resources.iter_entry_points('pyramid.pshell'):
             name = ep.name
@@ -189,6 +194,10 @@ class PShellCommand(object):
 
             if factory is not None:
                 shell = factory()
+            else:
+                raise ValueError(
+                    'could not find a shell named "%s"' % user_shell
+                )
 
         if shell is None:
             shell = self.make_default_shell()

{"pyramid/scripts/pshell.py": "from code import interact\nimport optparse\nimport os\nimport sys\nimport textwrap\nimport pkg_resources\n\nfrom pyramid.compat import configparser\nfrom pyramid.compat import exec_\nfrom pyramid.util import DottedNameResolver\nfrom pyramid.paster import bootstrap\n\nfrom pyramid.paster import setup_logging\n\nfrom pyramid.scripts.common import parse_vars\n\ndef main(argv=sys.argv, quiet=False):\n    command = PShellCommand(argv, quiet)\n    return command.run()\n\n\nclass PShellCommand(object):\n    usage = '%prog config_uri'\n    description = \"\"\"\\\n    Open an interactive shell with a Pyramid app loaded.  This command\n    accepts one positional argument named \"config_uri\" which specifies the\n    PasteDeploy config file to use for the interactive shell. The format is\n    \"inifile#name\". If the name is left off, the Pyramid default application\n    will be assumed.  Example: \"pshell myapp.ini#main\"\n\n    If you do not point the loader directly at the section of the ini file\n    containing your Pyramid application, the command will attempt to\n    find the app for you. If you are loading a pipeline that contains more\n    than one Pyramid application within it, the loader will use the\n    last one.\n    \"\"\"\n    bootstrap = (bootstrap,)  # for testing\n    pkg_resources = pkg_resources  # for testing\n\n    parser = optparse.OptionParser(\n        usage,\n        description=textwrap.dedent(description)\n        )\n    parser.add_option('-p', '--python-shell',\n                      action='store', type='string', dest='python_shell',\n                      default='', help='ipython | bpython | python')\n    parser.add_option('--setup',\n                      dest='setup',\n                      help=(\"A callable that will be passed the environment \"\n                            \"before it is made available to the shell. This \"\n                            \"option will override the 'setup' key in the \"\n                            \"[pshell] ini section.\"))\n\n    ConfigParser = configparser.ConfigParser # testing\n\n    loaded_objects = {}\n    object_help = {}\n    setup = None\n    pystartup = os.environ.get('PYTHONSTARTUP')\n\n    def __init__(self, argv, quiet=False):\n        self.quiet = quiet\n        self.options, self.args = self.parser.parse_args(argv[1:])\n\n    def pshell_file_config(self, filename):\n        config = self.ConfigParser()\n        config.read(filename)\n        try:\n            items = config.items('pshell')\n        except configparser.NoSectionError:\n            return\n\n        resolver = DottedNameResolver(None)\n        self.loaded_objects = {}\n        self.object_help = {}\n        self.setup = None\n        for k, v in items:\n            if k == 'setup':\n                self.setup = v\n            else:\n                self.loaded_objects[k] = resolver.maybe_resolve(v)\n                self.object_help[k] = v\n\n    def out(self, msg): # pragma: no cover\n        if not self.quiet:\n            print(msg)\n\n    def run(self, shell=None):\n        if not self.args:\n            self.out('Requires a config file argument')\n            return 2\n        config_uri = self.args[0]\n        config_file = config_uri.split('#', 1)[0]\n        setup_logging(config_file)\n        self.pshell_file_config(config_file)\n\n        # bootstrap the environ\n        env = self.bootstrap[0](config_uri, options=parse_vars(self.args[1:]))\n\n        # remove the closer from the env\n        closer = env.pop('closer')\n\n        # setup help text for default environment\n        env_help = dict(env)\n        env_help['app'] = 'The WSGI application.'\n        env_help['root'] = 'Root of the default resource tree.'\n        env_help['registry'] = 'Active Pyramid registry.'\n        env_help['request'] = 'Active request object.'\n        env_help['root_factory'] = (\n            'Default root factory used to create `root`.')\n\n        # override use_script with command-line options\n        if self.options.setup:\n            self.setup = self.options.setup\n\n        if self.setup:\n            # store the env before muddling it with the script\n            orig_env = env.copy()\n\n            # call the setup callable\n            resolver = DottedNameResolver(None)\n            setup = resolver.maybe_resolve(self.setup)\n            setup(env)\n\n            # remove any objects from default help that were overidden\n            for k, v in env.items():\n                if k not in orig_env or env[k] != orig_env[k]:\n                    env_help[k] = v\n\n        # load the pshell section of the ini file\n        env.update(self.loaded_objects)\n\n        # eliminate duplicates from env, allowing custom vars to override\n        for k in self.loaded_objects:\n            if k in env_help:\n                del env_help[k]\n\n        # generate help text\n        help = ''\n        if env_help:\n            help += 'Environment:'\n            for var in sorted(env_help.keys()):\n                help += '\\n  %-12s %s' % (var, env_help[var])\n\n        if self.object_help:\n            help += '\\n\\nCustom Variables:'\n            for var in sorted(self.object_help.keys()):\n                help += '\\n  %-12s %s' % (var, self.object_help[var])\n\n        if shell is None:\n            shell = self.make_shell()\n\n        if self.pystartup and os.path.isfile(self.pystartup):\n            with open(self.pystartup, 'rb') as fp:\n                exec_(fp.read().decode('utf-8'), env)\n            if '__builtins__' in env:\n                del env['__builtins__']\n\n        try:\n            shell(env, help)\n        finally:\n            closer()\n\n    def make_shell(self):\n        shells = {}\n\n        priority_order = ['ipython', 'bpython']\n\n        for ep in self.pkg_resources.iter_entry_points('pyramid.pshell'):\n            name = ep.name\n            shell_module = ep.load()\n            shells[name] = shell_module\n\n        sorted_shells = sorted(\n            shells.items(), key=lambda x: priority_order.index(x[0])\n        )\n\n        shell = None\n        user_shell = self.options.python_shell.lower()\n\n        if not user_shell:\n            for name, factory in sorted_shells:\n                shell = factory()\n\n                if shell is not None:\n                    break\n        else:\n            factory = shells.get(user_shell)\n\n            if factory is not None:\n                shell = factory()\n\n        if shell is None:\n            shell = self.make_default_shell()\n\n        return shell\n\n    def make_default_shell(self, interact=interact):\n        def shell(env, help):\n            cprt = 'Type \"help\" for more information.'\n            banner = \"Python %s on %s\\n%s\" % (sys.version, sys.platform, cprt)\n            banner += '\\n\\n' + help + '\\n'\n            interact(banner, local=env)\n        return shell\n\n    @classmethod\n    def make_bpython_shell(cls, BPShell=None):\n        if BPShell is None: # pragma: no cover\n            try:\n                from bpython import embed\n                BPShell = embed\n            except ImportError:\n                return None\n        def shell(env, help):\n            BPShell(locals_=env, banner=help + '\\n')\n        return shell\n\n    @classmethod\n    def make_ipython_shell(cls, IPShellFactory=None):\n        if IPShellFactory is None: # pragma: no cover\n            try:\n                from IPython.terminal.embed import (\n                    InteractiveShellEmbed)\n                IPShellFactory = InteractiveShellEmbed\n            except ImportError:\n                return None\n        def shell(env, help):\n            IPShell = IPShellFactory(banner2=help + '\\n', user_ns=env)\n            IPShell()\n        return shell\n\n\nif __name__ == '__main__': # pragma: no cover\n    sys.exit(main() or 0)\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 ---
**Analysis:**

- **Key Parts:**
  - The commit modifies the `pshell.py` script to handle specific shells more gracefully.
  - Before the commit, the test `test_command_loads_default_shell_with_unknown_shell` failed because `command.run()` returned `None` instead of `1` when an unknown shell was specified.
  - The change in the commit ensures that when an unknown shell is passed, a `ValueError` is raised, an error message is outputted, and the command returns `1`.

- **Main Problem:**
  When an unknown shell is specified, the `PShellCommand` does not return the expected error status and fails to notify the user appropriately.

- **Expected Behavior:**
  The command should return a status code of `1` and display an error message indicating that the specified shell is not recognized.

- **Actual Behavior:**
  The command returns `None` instead of `1`, and the error message is not properly handled or displayed.

- **Issue Description:**
  The issue revolves around improper handling of unknown shells in the `PShellCommand`, leading to unexpected behavior and inadequate user feedback.

---

[ISSUE]

**Title:** PShellCommand.run() Does Not Return Error Status for Unknown Shells

**Description:**
When an unknown shell is specified for the `PShellCommand`, the command does not return the expected error status code and fails to inform the user about the unrecognized shell. This results in `None` being returned instead of the expected status code `1`.

**Example Code:**
```python
command = PShellCommand()
command.options.python_shell = 'unknown_python_shell'
result = command.run()
# Expected result: 1
# Actual result: None
```

**Expected Behavior:**
The command should return a status code of `1` and display an error message indicating that the specified shell `'unknown_python_shell'` is not recognized.

**Actual Behavior:**
The command returns `None` without providing a clear error message, making it difficult to understand why the shell failed to initialize.

[/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/scripts/pshell.py
from code import interact
import optparse
import os
import sys
import textwrap
import pkg_resources

from pyramid.compat import configparser
from pyramid.compat import exec_
from pyramid.util import DottedNameResolver
from pyramid.paster import bootstrap

from pyramid.paster import setup_logging

from pyramid.scripts.common import parse_vars

def main(argv=sys.argv, quiet=False):
    command = PShellCommand(argv, quiet)
    return command.run()


class PShellCommand(object):
    usage = '%prog config_uri'
    description = """\
    Open an interactive shell with a Pyramid app loaded.  This command
    accepts one positional argument named "config_uri" which specifies the
    PasteDeploy config file to use for the interactive shell. The format is
    "inifile#name". If the name is left off, the Pyramid default application
    will be assumed.  Example: "pshell myapp.ini#main"

    If you do not point the loader directly at the section of the ini file
    containing your Pyramid application, the command will attempt to
    find the app for you. If you are loading a pipeline that contains more
    than one Pyramid application within it, the loader will use the
    last one.
    """
    bootstrap = (bootstrap,)  # for testing
    pkg_resources = pkg_resources  # for testing

    parser = optparse.OptionParser(
        usage,
        description=textwrap.dedent(description)
        )
    parser.add_option('-p', '--python-shell',
                      action='store', type='string', dest='python_shell',
                      default='', help='ipython | bpython | python')
    parser.add_option('--setup',
                      dest='setup',
                      help=("A callable that will be passed the environment "
                            "before it is made available to the shell. This "
                            "option will override the 'setup' key in the "
                            "[pshell] ini section."))

    ConfigParser = configparser.ConfigParser # testing

    loaded_objects = {}
    object_help = {}
    setup = None
    pystartup = os.environ.get('PYTHONSTARTUP')

    def __init__(self, argv, quiet=False):
        self.quiet = quiet
        self.options, self.args = self.parser.parse_args(argv[1:])

    def pshell_file_config(self, filename):
        config = self.ConfigParser()
        config.read(filename)
        try:
            items = config.items('pshell')
        except configparser.NoSectionError:
            return

        resolver = DottedNameResolver(None)
        self.loaded_objects = {}
        self.object_help = {}
        self.setup = None
        for k, v in items:
            if k == 'setup':
                self.setup = v
            else:
                self.loaded_objects[k] = resolver.maybe_resolve(v)
                self.object_help[k] = v

    def out(self, msg): # pragma: no cover
        if not self.quiet:
            print(msg)

    def run(self, shell=None):
        if not self.args:
            self.out('Requires a config file argument')
            return 2
        config_uri = self.args[0]
        config_file = config_uri.split('#', 1)[0]
        setup_logging(config_file)
        self.pshell_file_config(config_file)

        # bootstrap the environ
        env = self.bootstrap[0](config_uri, options=parse_vars(self.args[1:]))

        # remove the closer from the env
        closer = env.pop('closer')

        # setup help text for default environment
        env_help = dict(env)
        env_help['app'] = 'The WSGI application.'
        env_help['root'] = 'Root of the default resource tree.'
        env_help['registry'] = 'Active Pyramid registry.'
        env_help['request'] = 'Active request object.'
        env_help['root_factory'] = (
            'Default root factory used to create `root`.')

        # override use_script with command-line options
        if self.options.setup:
            self.setup = self.options.setup

        if self.setup:
            # store the env before muddling it with the script
            orig_env = env.copy()

            # call the setup callable
            resolver = DottedNameResolver(None)
            setup = resolver.maybe_resolve(self.setup)
            setup(env)

            # remove any objects from default help that were overidden
            for k, v in env.items():
                if k not in orig_env or env[k] != orig_env[k]:
                    env_help[k] = v

        # load the pshell section of the ini file
        env.update(self.loaded_objects)

        # eliminate duplicates from env, allowing custom vars to override
        for k in self.loaded_objects:
            if k in env_help:
                del env_help[k]

        # generate help text
        help = ''
        if env_help:
            help += 'Environment:'
            for var in sorted(env_help.keys()):
                help += '\n  %-12s %s' % (var, env_help[var])

        if self.object_help:
            help += '\n\nCustom Variables:'
            for var in sorted(self.object_help.keys()):
                help += '\n  %-12s %s' % (var, self.object_help[var])

        if shell is None:
            shell = self.make_shell()

        if self.pystartup and os.path.isfile(self.pystartup):
            with open(self.pystartup, 'rb') as fp:
                exec_(fp.read().decode('utf-8'), env)
            if '__builtins__' in env:
                del env['__builtins__']

        try:
            shell(env, help)
        finally:
            closer()

    def make_shell(self):
        shells = {}

        priority_order = ['ipython', 'bpython']

        for ep in self.pkg_resources.iter_entry_points('pyramid.pshell'):
            name = ep.name
            shell_module = ep.load()
            shells[name] = shell_module

        sorted_shells = sorted(
            shells.items(), key=lambda x: priority_order.index(x[0])
        )

        shell = None
        user_shell = self.options.python_shell.lower()

        if not user_shell:
            for name, factory in sorted_shells:
                shell = factory()

                if shell is not None:
                    break
        else:
            factory = shells.get(user_shell)

            if factory is not None:
                shell = factory()

        if shell is None:
            shell = self.make_default_shell()

        return shell

    def make_default_shell(self, interact=interact):
        def shell(env, help):
            cprt = 'Type "help" for more information.'
            banner = "Python %s on %s\n%s" % (sys.version, sys.platform, cprt)
            banner += '\n\n' + help + '\n'
            interact(banner, local=env)
        return shell

    @classmethod
    def make_bpython_shell(cls, BPShell=None):
        if BPShell is None: # pragma: no cover
            try:
                from bpython import embed
                BPShell = embed
            except ImportError:
                return None
        def shell(env, help):
            BPShell(locals_=env, banner=help + '\n')
        return shell

    @classmethod
    def make_ipython_shell(cls, IPShellFactory=None):
        if IPShellFactory is None: # pragma: no cover
            try:
                from IPython.terminal.embed import (
                    InteractiveShellEmbed)
                IPShellFactory = InteractiveShellEmbed
            except ImportError:
                return None
        def shell(env, help):
            IPShell = IPShellFactory(banner2=help + '\n', user_ns=env)
            IPShell()
        return shell


if __name__ == '__main__': # pragma: no cover
    sys.exit(main() or 0)

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