{
    "file_diffs": [
        {
            "old_file_content": "import base64\nimport binascii\nimport hashlib\nimport hmac\nimport os\nimport time\n\nfrom zope.deprecation import deprecated\nfrom zope.interface import implementer\n\nfrom webob.cookies import SignedSerializer\n\nfrom pyramid.compat import (\n    pickle,\n    PY3,\n    text_,\n    bytes_,\n    native_,\n    )\n\nfrom pyramid.exceptions import BadCSRFToken\nfrom pyramid.interfaces import ISession\nfrom pyramid.util import strings_differ\n\ndef manage_accessed(wrapped):\n    \"\"\" Decorator which causes a cookie to be renewed when an accessor\n    method is called.\"\"\"\n    def accessed(session, *arg, **kw):\n        session.accessed = now = int(time.time())\n        if now - session.renewed > session._reissue_time:\n            session.changed()\n        return wrapped(session, *arg, **kw)\n    accessed.__doc__ = wrapped.__doc__\n    return accessed\n\ndef manage_changed(wrapped):\n    \"\"\" Decorator which causes a cookie to be set when a setter method\n    is called.\"\"\"\n    def changed(session, *arg, **kw):\n        session.accessed = int(time.time())\n        session.changed()\n        return wrapped(session, *arg, **kw)\n    changed.__doc__ = wrapped.__doc__\n    return changed\n\ndef signed_serialize(data, secret):\n    \"\"\" Serialize any pickleable structure (``data``) and sign it\n    using the ``secret`` (must be a string).  Return the\n    serialization, which includes the signature as its first 40 bytes.\n    The ``signed_deserialize`` method will deserialize such a value.\n\n    This function is useful for creating signed cookies.  For example:\n\n    .. code-block:: python\n\n       cookieval = signed_serialize({'a':1}, 'secret')\n       response.set_cookie('signed_cookie', cookieval)\n    \"\"\"\n    pickled = pickle.dumps(data, pickle.HIGHEST_PROTOCOL)\n    sig = hmac.new(bytes_(secret), pickled, hashlib.sha1).hexdigest()\n    return sig + native_(base64.b64encode(pickled))\n\ndef signed_deserialize(serialized, secret, hmac=hmac):\n    \"\"\" Deserialize the value returned from ``signed_serialize``.  If\n    the value cannot be deserialized for any reason, a\n    :exc:`ValueError` exception will be raised.\n\n    This function is useful for deserializing a signed cookie value\n    created by ``signed_serialize``.  For example:\n\n    .. code-block:: python\n\n       cookieval = request.cookies['signed_cookie']\n       data = signed_deserialize(cookieval, 'secret')\n    \"\"\"\n    # hmac parameterized only for unit tests\n    try:\n        input_sig, pickled = (bytes_(serialized[:40]),\n                              base64.b64decode(bytes_(serialized[40:])))\n    except (binascii.Error, TypeError) as e:\n        # Badly formed data can make base64 die\n        raise ValueError('Badly formed base64 data: %s' % e)\n\n    sig = bytes_(hmac.new(bytes_(secret), pickled, hashlib.sha1).hexdigest())\n\n    # Avoid timing attacks (see\n    # http://seb.dbzteam.org/crypto/python-oauth-timing-hmac.pdf)\n    if strings_differ(sig, input_sig):\n        raise ValueError('Invalid signature')\n\n    return pickle.loads(pickled)\n\ndef check_csrf_token(request,\n                     token='csrf_token',\n                     header='X-CSRF-Token',\n                     raises=True):\n    \"\"\" Check the CSRF token in the request's session against the value in\n    ``request.params.get(token)`` or ``request.headers.get(header)``.\n    If a ``token`` keyword is not supplied to this function, the string\n    ``csrf_token`` will be used to look up the token in ``request.params``.\n    If a ``header`` keyword is not supplied to this function, the string\n    ``X-CSRF-Token`` will be used to look up the token in ``request.headers``.\n\n    If the value supplied by param or by header doesn't match the value\n    supplied by ``request.session.get_csrf_token()``, and ``raises`` is\n    ``True``, this function will raise an\n    :exc:`pyramid.exceptions.BadCSRFToken` exception.\n    If the check does succeed and ``raises`` is ``False``, this\n    function will return ``False``.  If the CSRF check is successful, this\n    function will return ``True`` unconditionally.\n\n    Note that using this function requires that a :term:`session factory` is\n    configured.\n\n    .. versionadded:: 1.4a2\n    \"\"\"\n    supplied_token = request.params.get(token, request.headers.get(header))\n    if supplied_token != request.session.get_csrf_token():\n        if raises:\n            raise BadCSRFToken('check_csrf_token(): Invalid token')\n        return False\n    return True\n\nclass PickleSerializer(object):\n    \"\"\" A Webob cookie serializer that uses the pickle protocol to dump Python\n    data to bytes.\"\"\"\n    def loads(self, bstruct):\n        return pickle.loads(bstruct)\n\n    def dumps(self, appstruct):\n        return pickle.dumps(appstruct, pickle.HIGHEST_PROTOCOL)\n\ndef BaseCookieSessionFactory(\n    serializer,\n    cookie_name='session',\n    max_age=None,\n    path='/',\n    domain=None,\n    secure=False,\n    httponly=False,\n    timeout=1200,\n    reissue_time=0,\n    set_on_exception=True,\n    ):\n    \"\"\"\n    .. versionadded:: 1.5\n    \n    Configure a :term:`session factory` which will provide cookie-based\n    sessions.  The return value of this function is a :term:`session factory`,\n    which may be provided as the ``session_factory`` argument of a\n    :class:`pyramid.config.Configurator` constructor, or used as the\n    ``session_factory`` argument of the\n    :meth:`pyramid.config.Configurator.set_session_factory` method.\n\n    The session factory returned by this function will create sessions\n    which are limited to storing fewer than 4000 bytes of data (as the\n    payload must fit into a single cookie).\n\n    .. warning:\n\n       This class provides no protection from tampering and is only intended\n       to be used by framework authors to create their own cookie-based\n       session factories.\n\n    Parameters:\n\n    ``serializer``\n      An object with two methods: ``loads`` and ``dumps``.  The ``loads`` method\n      should accept bytes and return a Python object.  The ``dumps`` method\n      should accept a Python object and return bytes.  A ``ValueError`` should\n      be raised for malformed inputs.\n\n    ``cookie_name``\n      The name of the cookie used for sessioning. Default: ``'session'``.\n\n    ``max_age``\n      The maximum age of the cookie used for sessioning (in seconds).\n      Default: ``None`` (browser scope).\n\n    ``path``\n      The path used for the session cookie. Default: ``'/'``.\n\n    ``domain``\n      The domain used for the session cookie.  Default: ``None`` (no domain).\n\n    ``secure``\n      The 'secure' flag of the session cookie. Default: ``False``.\n\n    ``httponly``\n      Hide the cookie from Javascript by setting the 'HttpOnly' flag of the\n      session cookie. Default: ``False``.\n\n    ``timeout``\n      A number of seconds of inactivity before a session times out. If\n      ``None`` then the cookie never expires. This lifetime only applies\n      to the *value* within the cookie. Meaning that if the cookie expires\n      due to a lower ``max_age``, then this setting has no effect.\n      Default: ``1200``.\n\n    ``reissue_time``\n      The number of seconds that must pass before the cookie is automatically\n      reissued as the result of a request which accesses the session. The\n      duration is measured as the number of seconds since the last session\n      cookie was issued and 'now'.  If this value is ``0``, a new cookie\n      will be reissued on every request accessing the session. If ``None``\n      then the cookie's lifetime will never be extended.\n\n      A good rule of thumb: if you want auto-expired cookies based on\n      inactivity: set the ``timeout`` value to 1200 (20 mins) and set the\n      ``reissue_time`` value to perhaps a tenth of the ``timeout`` value\n      (120 or 2 mins).  It's nonsensical to set the ``timeout`` value lower\n      than the ``reissue_time`` value, as the ticket will never be reissued.\n      However, such a configuration is not explicitly prevented.\n\n      Default: ``0``.\n\n    ``set_on_exception``\n      If ``True``, set a session cookie even if an exception occurs\n      while rendering a view. Default: ``True``.\n\n    .. versionadded: 1.5a3\n    \"\"\"\n\n    @implementer(ISession)\n    class CookieSession(dict):\n        \"\"\" Dictionary-like session object \"\"\"\n\n        # configuration parameters\n        _cookie_name = cookie_name\n        _cookie_max_age = max_age\n        _cookie_path = path\n        _cookie_domain = domain\n        _cookie_secure = secure\n        _cookie_httponly = httponly\n        _cookie_on_exception = set_on_exception\n        _timeout = timeout\n        _reissue_time = reissue_time\n\n        # dirty flag\n        _dirty = False\n\n        def __init__(self, request):\n            self.request = request\n            now = time.time()\n            created = renewed = now\n            new = True\n            value = None\n            state = {}\n            cookieval = request.cookies.get(self._cookie_name)\n            if cookieval is not None:\n                try:\n                    value = serializer.loads(bytes_(cookieval))\n                except ValueError:\n                    # the cookie failed to deserialize, dropped\n                    value = None\n\n            if value is not None:\n                try:\n                    renewed, created, state = value\n                    new = False\n                    if now - renewed > self._timeout:\n                        # expire the session because it was not renewed\n                        # before the timeout threshold\n                        state = {}\n                except TypeError:\n                    # value failed to unpack properly or renewed was not\n                    # a numeric type so we'll fail deserialization here\n                    state = {}\n\n            self.created = created\n            self.accessed = renewed\n            self.renewed = renewed\n            self.new = new\n            dict.__init__(self, state)\n\n        # ISession methods\n        def changed(self):\n            if not self._dirty:\n                self._dirty = True\n                def set_cookie_callback(request, response):\n                    self._set_cookie(response)\n                    self.request = None # explicitly break cycle for gc\n                self.request.add_response_callback(set_cookie_callback)\n\n        def invalidate(self):\n            self.clear() # XXX probably needs to unset cookie\n\n        # non-modifying dictionary methods\n        get = manage_accessed(dict.get)\n        __getitem__ = manage_accessed(dict.__getitem__)\n        items = manage_accessed(dict.items)\n        values = manage_accessed(dict.values)\n        keys = manage_accessed(dict.keys)\n        __contains__ = manage_accessed(dict.__contains__)\n        __len__ = manage_accessed(dict.__len__)\n        __iter__ = manage_accessed(dict.__iter__)\n\n        if not PY3:\n            iteritems = manage_accessed(dict.iteritems)\n            itervalues = manage_accessed(dict.itervalues)\n            iterkeys = manage_accessed(dict.iterkeys)\n            has_key = manage_accessed(dict.has_key)\n\n        # modifying dictionary methods\n        clear = manage_changed(dict.clear)\n        update = manage_changed(dict.update)\n        setdefault = manage_changed(dict.setdefault)\n        pop = manage_changed(dict.pop)\n        popitem = manage_changed(dict.popitem)\n        __setitem__ = manage_changed(dict.__setitem__)\n        __delitem__ = manage_changed(dict.__delitem__)\n\n        # flash API methods\n        @manage_changed\n        def flash(self, msg, queue='', allow_duplicate=True):\n            storage = self.setdefault('_f_' + queue, [])\n            if allow_duplicate or (msg not in storage):\n                storage.append(msg)\n\n        @manage_changed\n        def pop_flash(self, queue=''):\n            storage = self.pop('_f_' + queue, [])\n            return storage\n\n        @manage_accessed\n        def peek_flash(self, queue=''):\n            storage = self.get('_f_' + queue, [])\n            return storage\n\n        # CSRF API methods\n        @manage_changed\n        def new_csrf_token(self):\n            token = text_(binascii.hexlify(os.urandom(20)))\n            self['_csrft_'] = token\n            return token\n\n        @manage_accessed\n        def get_csrf_token(self):\n            token = self.get('_csrft_', None)\n            if token is None:\n                token = self.new_csrf_token()\n            return token\n\n        # non-API methods\n        def _set_cookie(self, response):\n            if not self._cookie_on_exception:\n                exception = getattr(self.request, 'exception', None)\n                if exception is not None: # dont set a cookie during exceptions\n                    return False\n            cookieval = native_(serializer.dumps(\n                (self.accessed, self.created, dict(self))\n                ))\n            if len(cookieval) > 4064:\n                raise ValueError(\n                    'Cookie value is too long to store (%s bytes)' %\n                    len(cookieval)\n                    )\n            response.set_cookie(\n                self._cookie_name,\n                value=cookieval,\n                max_age=self._cookie_max_age,\n                path=self._cookie_path,\n                domain=self._cookie_domain,\n                secure=self._cookie_secure,\n                httponly=self._cookie_httponly,\n                )\n            return True\n\n    return CookieSession\n\n\ndef UnencryptedCookieSessionFactoryConfig(\n    secret,\n    timeout=1200,\n    cookie_name='session',\n    cookie_max_age=None,\n    cookie_path='/',\n    cookie_domain=None,\n    cookie_secure=False,\n    cookie_httponly=False,\n    cookie_on_exception=True,\n    signed_serialize=signed_serialize,\n    signed_deserialize=signed_deserialize,\n    ):\n    \"\"\"\n    .. deprecated:: 1.5\n        Use :func:`pyramid.session.SignedCookieSessionFactory` instead.\n        Caveat: Cookies generated using ``SignedCookieSessionFactory`` are not\n        compatible with cookies generated using\n        ``UnencryptedCookieSessionFactory``, so existing user session data\n        will be destroyed if you switch to it.\n    \n    Configure a :term:`session factory` which will provide unencrypted\n    (but signed) cookie-based sessions.  The return value of this\n    function is a :term:`session factory`, which may be provided as\n    the ``session_factory`` argument of a\n    :class:`pyramid.config.Configurator` constructor, or used\n    as the ``session_factory`` argument of the\n    :meth:`pyramid.config.Configurator.set_session_factory`\n    method.\n\n    The session factory returned by this function will create sessions\n    which are limited to storing fewer than 4000 bytes of data (as the\n    payload must fit into a single cookie).\n\n    Parameters:\n\n    ``secret``\n      A string which is used to sign the cookie.\n\n    ``timeout``\n      A number of seconds of inactivity before a session times out.\n\n    ``cookie_name``\n      The name of the cookie used for sessioning.\n\n    ``cookie_max_age``\n      The maximum age of the cookie used for sessioning (in seconds).\n      Default: ``None`` (browser scope).\n\n    ``cookie_path``\n      The path used for the session cookie.\n\n    ``cookie_domain``\n      The domain used for the session cookie.  Default: ``None`` (no domain).\n\n    ``cookie_secure``\n      The 'secure' flag of the session cookie.\n\n    ``cookie_httponly``\n      The 'httpOnly' flag of the session cookie.\n\n    ``cookie_on_exception``\n      If ``True``, set a session cookie even if an exception occurs\n      while rendering a view.\n\n    ``signed_serialize``\n      A callable which takes more or less arbitrary Python data structure and\n      a secret and returns a signed serialization in bytes.\n      Default: ``signed_serialize`` (using pickle).\n\n    ``signed_deserialize``\n      A callable which takes a signed and serialized data structure in bytes\n      and a secret and returns the original data structure if the signature\n      is valid. Default: ``signed_deserialize`` (using pickle).\n    \"\"\"\n\n    class SerializerWrapper(object):\n        def __init__(self, secret):\n            self.secret = secret\n            \n        def loads(self, bstruct):\n            return signed_deserialize(bstruct, secret)\n\n        def dumps(self, appstruct):\n            return signed_serialize(appstruct, secret)\n\n    serializer = SerializerWrapper(secret)\n\n    return BaseCookieSessionFactory(\n        serializer,\n        cookie_name=cookie_name,\n        max_age=cookie_max_age,\n        path=cookie_path,\n        domain=cookie_domain,\n        secure=cookie_secure,\n        httponly=cookie_httponly,\n        timeout=timeout,\n        reissue_time=0, # to keep session.accessed == session.renewed\n        set_on_exception=cookie_on_exception,\n    )\n\ndeprecated(\n    'UnencryptedCookieSessionFactoryConfig',\n    'The UnencryptedCookieSessionFactoryConfig callable is deprecated as of '\n    'Pyramid 1.5.  Use ``pyramid.session.SignedCookieSessionFactory`` instead. '\n    'Caveat: Cookies generated using SignedCookieSessionFactory are not '\n    'compatible with cookies generated using UnencryptedCookieSessionFactory, '\n    'so existing user session data will be destroyed if you switch to it.'\n    )\n\ndef SignedCookieSessionFactory(\n    secret,\n    cookie_name='session',\n    max_age=None,\n    path='/',\n    domain=None,\n    secure=False,\n    httponly=False,\n    set_on_exception=True,\n    timeout=1200,\n    reissue_time=0,\n    hashalg='sha512',\n    salt='pyramid.session.',\n    serializer=None,\n    ):\n    \"\"\"\n    .. versionadded:: 1.5\n    \n    Configure a :term:`session factory` which will provide signed\n    cookie-based sessions.  The return value of this\n    function is a :term:`session factory`, which may be provided as\n    the ``session_factory`` argument of a\n    :class:`pyramid.config.Configurator` constructor, or used\n    as the ``session_factory`` argument of the\n    :meth:`pyramid.config.Configurator.set_session_factory`\n    method.\n\n    The session factory returned by this function will create sessions\n    which are limited to storing fewer than 4000 bytes of data (as the\n    payload must fit into a single cookie).\n\n    Parameters:\n\n    ``secret``\n      A string which is used to sign the cookie. The secret should be at\n      least as long as the block size of the selected hash algorithm. For\n      ``sha512`` this would mean a 128 bit (64 character) secret.  It should\n      be unique within the set of secret values provided to Pyramid for\n      its various subsystems (see :ref:`admonishment_against_secret_sharing`).\n\n    ``hashalg``\n      The HMAC digest algorithm to use for signing. The algorithm must be\n      supported by the :mod:`hashlib` library. Default: ``'sha512'``.\n\n    ``salt``\n      A namespace to avoid collisions between different uses of a shared\n      secret. Reusing a secret for different parts of an application is\n      strongly discouraged (see :ref:`admonishment_against_secret_sharing`).\n      Default: ``'pyramid.session.'``.\n\n    ``cookie_name``\n      The name of the cookie used for sessioning. Default: ``'session'``.\n\n    ``max_age``\n      The maximum age of the cookie used for sessioning (in seconds).\n      Default: ``None`` (browser scope).\n\n    ``path``\n      The path used for the session cookie. Default: ``'/'``.\n\n    ``domain``\n      The domain used for the session cookie.  Default: ``None`` (no domain).\n\n    ``secure``\n      The 'secure' flag of the session cookie. Default: ``False``.\n\n    ``httponly``\n      Hide the cookie from Javascript by setting the 'HttpOnly' flag of the\n      session cookie. Default: ``False``.\n\n    ``timeout``\n      A number of seconds of inactivity before a session times out. If\n      ``None`` then the cookie never expires. This lifetime only applies\n      to the *value* within the cookie. Meaning that if the cookie expires\n      due to a lower ``max_age``, then this setting has no effect.\n      Default: ``1200``.\n\n    ``reissue_time``\n      The number of seconds that must pass before the cookie is automatically\n      reissued as the result of accessing the session. The\n      duration is measured as the number of seconds since the last session\n      cookie was issued and 'now'.  If this value is ``0``, a new cookie\n      will be reissued on every request accessing the session. If ``None``\n      then the cookie's lifetime will never be extended.\n\n      A good rule of thumb: if you want auto-expired cookies based on\n      inactivity: set the ``timeout`` value to 1200 (20 mins) and set the\n      ``reissue_time`` value to perhaps a tenth of the ``timeout`` value\n      (120 or 2 mins).  It's nonsensical to set the ``timeout`` value lower\n      than the ``reissue_time`` value, as the ticket will never be reissued.\n      However, such a configuration is not explicitly prevented.\n\n      Default: ``0``.\n\n    ``set_on_exception``\n      If ``True``, set a session cookie even if an exception occurs\n      while rendering a view. Default: ``True``.\n\n    ``serializer``\n      An object with two methods: ``loads`` and ``dumps``.  The ``loads`` method\n      should accept bytes and return a Python object.  The ``dumps`` method\n      should accept a Python object and return bytes.  A ``ValueError`` should\n      be raised for malformed inputs.  If a serializer is not passed, the\n      :class:`pyramid.session.PickleSerializer` serializer will be used.\n\n    .. versionadded: 1.5a3\n    \"\"\"\n    if serializer is None:\n        serializer = PickleSerializer()\n\n    signed_serializer = SignedSerializer(\n        secret,\n        salt, \n        hashalg,\n        serializer=serializer,\n        )\n\n    return BaseCookieSessionFactory(\n        signed_serializer,\n        cookie_name=cookie_name,\n        max_age=max_age,\n        path=path,\n        domain=domain,\n        secure=secure,\n        httponly=httponly,\n        timeout=timeout,\n        reissue_time=reissue_time,\n        set_on_exception=set_on_exception,\n    )\n",
            "new_file_content": "import base64\nimport binascii\nimport hashlib\nimport hmac\nimport os\nimport time\n\nfrom zope.deprecation import deprecated\nfrom zope.interface import implementer\n\nfrom webob.cookies import SignedSerializer\n\nfrom pyramid.compat import (\n    pickle,\n    PY3,\n    text_,\n    bytes_,\n    native_,\n    )\n\nfrom pyramid.exceptions import BadCSRFToken\nfrom pyramid.interfaces import ISession\nfrom pyramid.util import strings_differ\n\ndef manage_accessed(wrapped):\n    \"\"\" Decorator which causes a cookie to be renewed when an accessor\n    method is called.\"\"\"\n    def accessed(session, *arg, **kw):\n        session.accessed = now = int(time.time())\n        if session._reissue_time is not None:\n            if now - session.renewed > session._reissue_time:\n                session.changed()\n        return wrapped(session, *arg, **kw)\n    accessed.__doc__ = wrapped.__doc__\n    return accessed\n\ndef manage_changed(wrapped):\n    \"\"\" Decorator which causes a cookie to be set when a setter method\n    is called.\"\"\"\n    def changed(session, *arg, **kw):\n        session.accessed = int(time.time())\n        session.changed()\n        return wrapped(session, *arg, **kw)\n    changed.__doc__ = wrapped.__doc__\n    return changed\n\ndef signed_serialize(data, secret):\n    \"\"\" Serialize any pickleable structure (``data``) and sign it\n    using the ``secret`` (must be a string).  Return the\n    serialization, which includes the signature as its first 40 bytes.\n    The ``signed_deserialize`` method will deserialize such a value.\n\n    This function is useful for creating signed cookies.  For example:\n\n    .. code-block:: python\n\n       cookieval = signed_serialize({'a':1}, 'secret')\n       response.set_cookie('signed_cookie', cookieval)\n    \"\"\"\n    pickled = pickle.dumps(data, pickle.HIGHEST_PROTOCOL)\n    sig = hmac.new(bytes_(secret), pickled, hashlib.sha1).hexdigest()\n    return sig + native_(base64.b64encode(pickled))\n\ndef signed_deserialize(serialized, secret, hmac=hmac):\n    \"\"\" Deserialize the value returned from ``signed_serialize``.  If\n    the value cannot be deserialized for any reason, a\n    :exc:`ValueError` exception will be raised.\n\n    This function is useful for deserializing a signed cookie value\n    created by ``signed_serialize``.  For example:\n\n    .. code-block:: python\n\n       cookieval = request.cookies['signed_cookie']\n       data = signed_deserialize(cookieval, 'secret')\n    \"\"\"\n    # hmac parameterized only for unit tests\n    try:\n        input_sig, pickled = (bytes_(serialized[:40]),\n                              base64.b64decode(bytes_(serialized[40:])))\n    except (binascii.Error, TypeError) as e:\n        # Badly formed data can make base64 die\n        raise ValueError('Badly formed base64 data: %s' % e)\n\n    sig = bytes_(hmac.new(bytes_(secret), pickled, hashlib.sha1).hexdigest())\n\n    # Avoid timing attacks (see\n    # http://seb.dbzteam.org/crypto/python-oauth-timing-hmac.pdf)\n    if strings_differ(sig, input_sig):\n        raise ValueError('Invalid signature')\n\n    return pickle.loads(pickled)\n\ndef check_csrf_token(request,\n                     token='csrf_token',\n                     header='X-CSRF-Token',\n                     raises=True):\n    \"\"\" Check the CSRF token in the request's session against the value in\n    ``request.params.get(token)`` or ``request.headers.get(header)``.\n    If a ``token`` keyword is not supplied to this function, the string\n    ``csrf_token`` will be used to look up the token in ``request.params``.\n    If a ``header`` keyword is not supplied to this function, the string\n    ``X-CSRF-Token`` will be used to look up the token in ``request.headers``.\n\n    If the value supplied by param or by header doesn't match the value\n    supplied by ``request.session.get_csrf_token()``, and ``raises`` is\n    ``True``, this function will raise an\n    :exc:`pyramid.exceptions.BadCSRFToken` exception.\n    If the check does succeed and ``raises`` is ``False``, this\n    function will return ``False``.  If the CSRF check is successful, this\n    function will return ``True`` unconditionally.\n\n    Note that using this function requires that a :term:`session factory` is\n    configured.\n\n    .. versionadded:: 1.4a2\n    \"\"\"\n    supplied_token = request.params.get(token, request.headers.get(header))\n    if supplied_token != request.session.get_csrf_token():\n        if raises:\n            raise BadCSRFToken('check_csrf_token(): Invalid token')\n        return False\n    return True\n\nclass PickleSerializer(object):\n    \"\"\" A Webob cookie serializer that uses the pickle protocol to dump Python\n    data to bytes.\"\"\"\n    def loads(self, bstruct):\n        return pickle.loads(bstruct)\n\n    def dumps(self, appstruct):\n        return pickle.dumps(appstruct, pickle.HIGHEST_PROTOCOL)\n\ndef BaseCookieSessionFactory(\n    serializer,\n    cookie_name='session',\n    max_age=None,\n    path='/',\n    domain=None,\n    secure=False,\n    httponly=False,\n    timeout=1200,\n    reissue_time=0,\n    set_on_exception=True,\n    ):\n    \"\"\"\n    .. versionadded:: 1.5\n    \n    Configure a :term:`session factory` which will provide cookie-based\n    sessions.  The return value of this function is a :term:`session factory`,\n    which may be provided as the ``session_factory`` argument of a\n    :class:`pyramid.config.Configurator` constructor, or used as the\n    ``session_factory`` argument of the\n    :meth:`pyramid.config.Configurator.set_session_factory` method.\n\n    The session factory returned by this function will create sessions\n    which are limited to storing fewer than 4000 bytes of data (as the\n    payload must fit into a single cookie).\n\n    .. warning:\n\n       This class provides no protection from tampering and is only intended\n       to be used by framework authors to create their own cookie-based\n       session factories.\n\n    Parameters:\n\n    ``serializer``\n      An object with two methods: ``loads`` and ``dumps``.  The ``loads``\n      method should accept bytes and return a Python object.  The ``dumps``\n      method should accept a Python object and return bytes.  A ``ValueError``\n      should be raised for malformed inputs.\n\n    ``cookie_name``\n      The name of the cookie used for sessioning. Default: ``'session'``.\n\n    ``max_age``\n      The maximum age of the cookie used for sessioning (in seconds).\n      Default: ``None`` (browser scope).\n\n    ``path``\n      The path used for the session cookie. Default: ``'/'``.\n\n    ``domain``\n      The domain used for the session cookie.  Default: ``None`` (no domain).\n\n    ``secure``\n      The 'secure' flag of the session cookie. Default: ``False``.\n\n    ``httponly``\n      Hide the cookie from Javascript by setting the 'HttpOnly' flag of the\n      session cookie. Default: ``False``.\n\n    ``timeout``\n      A number of seconds of inactivity before a session times out. If\n      ``None`` then the cookie never expires. This lifetime only applies\n      to the *value* within the cookie. Meaning that if the cookie expires\n      due to a lower ``max_age``, then this setting has no effect.\n      Default: ``1200``.\n\n    ``reissue_time``\n      The number of seconds that must pass before the cookie is automatically\n      reissued as the result of a request which accesses the session. The\n      duration is measured as the number of seconds since the last session\n      cookie was issued and 'now'.  If this value is ``0``, a new cookie\n      will be reissued on every request accessing the session. If ``None``\n      then the cookie's lifetime will never be extended.\n\n      A good rule of thumb: if you want auto-expired cookies based on\n      inactivity: set the ``timeout`` value to 1200 (20 mins) and set the\n      ``reissue_time`` value to perhaps a tenth of the ``timeout`` value\n      (120 or 2 mins).  It's nonsensical to set the ``timeout`` value lower\n      than the ``reissue_time`` value, as the ticket will never be reissued.\n      However, such a configuration is not explicitly prevented.\n\n      Default: ``0``.\n\n    ``set_on_exception``\n      If ``True``, set a session cookie even if an exception occurs\n      while rendering a view. Default: ``True``.\n\n    .. versionadded: 1.5a3\n    \"\"\"\n\n    @implementer(ISession)\n    class CookieSession(dict):\n        \"\"\" Dictionary-like session object \"\"\"\n\n        # configuration parameters\n        _cookie_name = cookie_name\n        _cookie_max_age = max_age\n        _cookie_path = path\n        _cookie_domain = domain\n        _cookie_secure = secure\n        _cookie_httponly = httponly\n        _cookie_on_exception = set_on_exception\n        _timeout = timeout\n        _reissue_time = reissue_time\n\n        # dirty flag\n        _dirty = False\n\n        def __init__(self, request):\n            self.request = request\n            now = time.time()\n            created = renewed = now\n            new = True\n            value = None\n            state = {}\n            cookieval = request.cookies.get(self._cookie_name)\n            if cookieval is not None:\n                try:\n                    value = serializer.loads(bytes_(cookieval))\n                except ValueError:\n                    # the cookie failed to deserialize, dropped\n                    value = None\n\n            if value is not None:\n                try:\n                    # since the value is not necessarily signed, we have\n                    # to unpack it a little carefully\n                    rval, cval, sval = value\n                    renewed = float(rval)\n                    created = float(cval)\n                    state = sval\n                    new = False\n                except (TypeError, ValueError):\n                    # value failed to unpack properly or renewed was not\n                    # a numeric type so we'll fail deserialization here\n                    state = {}\n\n            if self._timeout is not None:\n                if now - renewed > self._timeout:\n                    # expire the session because it was not renewed\n                    # before the timeout threshold\n                    state = {}\n\n            self.created = created\n            self.accessed = renewed\n            self.renewed = renewed\n            self.new = new\n            dict.__init__(self, state)\n\n        # ISession methods\n        def changed(self):\n            if not self._dirty:\n                self._dirty = True\n                def set_cookie_callback(request, response):\n                    self._set_cookie(response)\n                    self.request = None # explicitly break cycle for gc\n                self.request.add_response_callback(set_cookie_callback)\n\n        def invalidate(self):\n            self.clear() # XXX probably needs to unset cookie\n\n        # non-modifying dictionary methods\n        get = manage_accessed(dict.get)\n        __getitem__ = manage_accessed(dict.__getitem__)\n        items = manage_accessed(dict.items)\n        values = manage_accessed(dict.values)\n        keys = manage_accessed(dict.keys)\n        __contains__ = manage_accessed(dict.__contains__)\n        __len__ = manage_accessed(dict.__len__)\n        __iter__ = manage_accessed(dict.__iter__)\n\n        if not PY3:\n            iteritems = manage_accessed(dict.iteritems)\n            itervalues = manage_accessed(dict.itervalues)\n            iterkeys = manage_accessed(dict.iterkeys)\n            has_key = manage_accessed(dict.has_key)\n\n        # modifying dictionary methods\n        clear = manage_changed(dict.clear)\n        update = manage_changed(dict.update)\n        setdefault = manage_changed(dict.setdefault)\n        pop = manage_changed(dict.pop)\n        popitem = manage_changed(dict.popitem)\n        __setitem__ = manage_changed(dict.__setitem__)\n        __delitem__ = manage_changed(dict.__delitem__)\n\n        # flash API methods\n        @manage_changed\n        def flash(self, msg, queue='', allow_duplicate=True):\n            storage = self.setdefault('_f_' + queue, [])\n            if allow_duplicate or (msg not in storage):\n                storage.append(msg)\n\n        @manage_changed\n        def pop_flash(self, queue=''):\n            storage = self.pop('_f_' + queue, [])\n            return storage\n\n        @manage_accessed\n        def peek_flash(self, queue=''):\n            storage = self.get('_f_' + queue, [])\n            return storage\n\n        # CSRF API methods\n        @manage_changed\n        def new_csrf_token(self):\n            token = text_(binascii.hexlify(os.urandom(20)))\n            self['_csrft_'] = token\n            return token\n\n        @manage_accessed\n        def get_csrf_token(self):\n            token = self.get('_csrft_', None)\n            if token is None:\n                token = self.new_csrf_token()\n            return token\n\n        # non-API methods\n        def _set_cookie(self, response):\n            if not self._cookie_on_exception:\n                exception = getattr(self.request, 'exception', None)\n                if exception is not None: # dont set a cookie during exceptions\n                    return False\n            cookieval = native_(serializer.dumps(\n                (self.accessed, self.created, dict(self))\n                ))\n            if len(cookieval) > 4064:\n                raise ValueError(\n                    'Cookie value is too long to store (%s bytes)' %\n                    len(cookieval)\n                    )\n            response.set_cookie(\n                self._cookie_name,\n                value=cookieval,\n                max_age=self._cookie_max_age,\n                path=self._cookie_path,\n                domain=self._cookie_domain,\n                secure=self._cookie_secure,\n                httponly=self._cookie_httponly,\n                )\n            return True\n\n    return CookieSession\n\n\ndef UnencryptedCookieSessionFactoryConfig(\n    secret,\n    timeout=1200,\n    cookie_name='session',\n    cookie_max_age=None,\n    cookie_path='/',\n    cookie_domain=None,\n    cookie_secure=False,\n    cookie_httponly=False,\n    cookie_on_exception=True,\n    signed_serialize=signed_serialize,\n    signed_deserialize=signed_deserialize,\n    ):\n    \"\"\"\n    .. deprecated:: 1.5\n        Use :func:`pyramid.session.SignedCookieSessionFactory` instead.\n        Caveat: Cookies generated using ``SignedCookieSessionFactory`` are not\n        compatible with cookies generated using\n        ``UnencryptedCookieSessionFactory``, so existing user session data\n        will be destroyed if you switch to it.\n    \n    Configure a :term:`session factory` which will provide unencrypted\n    (but signed) cookie-based sessions.  The return value of this\n    function is a :term:`session factory`, which may be provided as\n    the ``session_factory`` argument of a\n    :class:`pyramid.config.Configurator` constructor, or used\n    as the ``session_factory`` argument of the\n    :meth:`pyramid.config.Configurator.set_session_factory`\n    method.\n\n    The session factory returned by this function will create sessions\n    which are limited to storing fewer than 4000 bytes of data (as the\n    payload must fit into a single cookie).\n\n    Parameters:\n\n    ``secret``\n      A string which is used to sign the cookie.\n\n    ``timeout``\n      A number of seconds of inactivity before a session times out.\n\n    ``cookie_name``\n      The name of the cookie used for sessioning.\n\n    ``cookie_max_age``\n      The maximum age of the cookie used for sessioning (in seconds).\n      Default: ``None`` (browser scope).\n\n    ``cookie_path``\n      The path used for the session cookie.\n\n    ``cookie_domain``\n      The domain used for the session cookie.  Default: ``None`` (no domain).\n\n    ``cookie_secure``\n      The 'secure' flag of the session cookie.\n\n    ``cookie_httponly``\n      The 'httpOnly' flag of the session cookie.\n\n    ``cookie_on_exception``\n      If ``True``, set a session cookie even if an exception occurs\n      while rendering a view.\n\n    ``signed_serialize``\n      A callable which takes more or less arbitrary Python data structure and\n      a secret and returns a signed serialization in bytes.\n      Default: ``signed_serialize`` (using pickle).\n\n    ``signed_deserialize``\n      A callable which takes a signed and serialized data structure in bytes\n      and a secret and returns the original data structure if the signature\n      is valid. Default: ``signed_deserialize`` (using pickle).\n    \"\"\"\n\n    class SerializerWrapper(object):\n        def __init__(self, secret):\n            self.secret = secret\n            \n        def loads(self, bstruct):\n            return signed_deserialize(bstruct, secret)\n\n        def dumps(self, appstruct):\n            return signed_serialize(appstruct, secret)\n\n    serializer = SerializerWrapper(secret)\n\n    return BaseCookieSessionFactory(\n        serializer,\n        cookie_name=cookie_name,\n        max_age=cookie_max_age,\n        path=cookie_path,\n        domain=cookie_domain,\n        secure=cookie_secure,\n        httponly=cookie_httponly,\n        timeout=timeout,\n        reissue_time=0, # to keep session.accessed == session.renewed\n        set_on_exception=cookie_on_exception,\n    )\n\ndeprecated(\n    'UnencryptedCookieSessionFactoryConfig',\n    'The UnencryptedCookieSessionFactoryConfig callable is deprecated as of '\n    'Pyramid 1.5.  Use ``pyramid.session.SignedCookieSessionFactory`` instead.'\n    ' Caveat: Cookies generated using SignedCookieSessionFactory are not '\n    'compatible with cookies generated using UnencryptedCookieSessionFactory, '\n    'so existing user session data will be destroyed if you switch to it.'\n    )\n\ndef SignedCookieSessionFactory(\n    secret,\n    cookie_name='session',\n    max_age=None,\n    path='/',\n    domain=None,\n    secure=False,\n    httponly=False,\n    set_on_exception=True,\n    timeout=1200,\n    reissue_time=0,\n    hashalg='sha512',\n    salt='pyramid.session.',\n    serializer=None,\n    ):\n    \"\"\"\n    .. versionadded:: 1.5\n    \n    Configure a :term:`session factory` which will provide signed\n    cookie-based sessions.  The return value of this\n    function is a :term:`session factory`, which may be provided as\n    the ``session_factory`` argument of a\n    :class:`pyramid.config.Configurator` constructor, or used\n    as the ``session_factory`` argument of the\n    :meth:`pyramid.config.Configurator.set_session_factory`\n    method.\n\n    The session factory returned by this function will create sessions\n    which are limited to storing fewer than 4000 bytes of data (as the\n    payload must fit into a single cookie).\n\n    Parameters:\n\n    ``secret``\n      A string which is used to sign the cookie. The secret should be at\n      least as long as the block size of the selected hash algorithm. For\n      ``sha512`` this would mean a 128 bit (64 character) secret.  It should\n      be unique within the set of secret values provided to Pyramid for\n      its various subsystems (see :ref:`admonishment_against_secret_sharing`).\n\n    ``hashalg``\n      The HMAC digest algorithm to use for signing. The algorithm must be\n      supported by the :mod:`hashlib` library. Default: ``'sha512'``.\n\n    ``salt``\n      A namespace to avoid collisions between different uses of a shared\n      secret. Reusing a secret for different parts of an application is\n      strongly discouraged (see :ref:`admonishment_against_secret_sharing`).\n      Default: ``'pyramid.session.'``.\n\n    ``cookie_name``\n      The name of the cookie used for sessioning. Default: ``'session'``.\n\n    ``max_age``\n      The maximum age of the cookie used for sessioning (in seconds).\n      Default: ``None`` (browser scope).\n\n    ``path``\n      The path used for the session cookie. Default: ``'/'``.\n\n    ``domain``\n      The domain used for the session cookie.  Default: ``None`` (no domain).\n\n    ``secure``\n      The 'secure' flag of the session cookie. Default: ``False``.\n\n    ``httponly``\n      Hide the cookie from Javascript by setting the 'HttpOnly' flag of the\n      session cookie. Default: ``False``.\n\n    ``timeout``\n      A number of seconds of inactivity before a session times out. If\n      ``None`` then the cookie never expires. This lifetime only applies\n      to the *value* within the cookie. Meaning that if the cookie expires\n      due to a lower ``max_age``, then this setting has no effect.\n      Default: ``1200``.\n\n    ``reissue_time``\n      The number of seconds that must pass before the cookie is automatically\n      reissued as the result of accessing the session. The\n      duration is measured as the number of seconds since the last session\n      cookie was issued and 'now'.  If this value is ``0``, a new cookie\n      will be reissued on every request accessing the session. If ``None``\n      then the cookie's lifetime will never be extended.\n\n      A good rule of thumb: if you want auto-expired cookies based on\n      inactivity: set the ``timeout`` value to 1200 (20 mins) and set the\n      ``reissue_time`` value to perhaps a tenth of the ``timeout`` value\n      (120 or 2 mins).  It's nonsensical to set the ``timeout`` value lower\n      than the ``reissue_time`` value, as the ticket will never be reissued.\n      However, such a configuration is not explicitly prevented.\n\n      Default: ``0``.\n\n    ``set_on_exception``\n      If ``True``, set a session cookie even if an exception occurs\n      while rendering a view. Default: ``True``.\n\n    ``serializer``\n      An object with two methods: ``loads`` and ``dumps``.  The ``loads``\n      method should accept bytes and return a Python object.  The ``dumps``\n      method should accept a Python object and return bytes.  A ``ValueError``\n      should be raised for malformed inputs.  If a serializer is not passed,\n      the :class:`pyramid.session.PickleSerializer` serializer will be used.\n\n    .. versionadded: 1.5a3\n    \"\"\"\n    if serializer is None:\n        serializer = PickleSerializer()\n\n    signed_serializer = SignedSerializer(\n        secret,\n        salt,\n        hashalg,\n        serializer=serializer,\n        )\n\n    return BaseCookieSessionFactory(\n        signed_serializer,\n        cookie_name=cookie_name,\n        max_age=max_age,\n        path=path,\n        domain=domain,\n        secure=secure,\n        httponly=httponly,\n        timeout=timeout,\n        reissue_time=reissue_time,\n        set_on_exception=set_on_exception,\n    )\n",
            "header": {
                "file": {
                    "path": "pyramid/session.py"
                },
                "misc_line": null
            },
            "index_line": {
                "old_commit_hash": "9fe2add60",
                "new_commit_hash": "56d99e9de",
                "mode": "100644"
            },
            "is_binary_file": false,
            "binary_line": null,
            "minus_file": {
                "path": "a/pyramid/session.py"
            },
            "plus_file": {
                "path": "b/pyramid/session.py"
            },
            "hunks": [
                {
                    "descriptor": {
                        "old_range": {
                            "start": 27,
                            "length": 8
                        },
                        "new_range": {
                            "start": 27,
                            "length": 9
                        },
                        "section": "def manage_accessed(wrapped):"
                    },
                    "line_group": {
                        "all_lines": [
                            {
                                "content": "    method is called.\"\"\"",
                                "type": "context"
                            },
                            {
                                "content": "    def accessed(session, *arg, **kw):",
                                "type": "context"
                            },
                            {
                                "content": "        session.accessed = now = int(time.time())",
                                "type": "context"
                            },
                            {
                                "content": "        if now - session.renewed > session._reissue_time:",
                                "type": "deleted"
                            },
                            {
                                "content": "            session.changed()",
                                "type": "deleted"
                            },
                            {
                                "content": "        if session._reissue_time is not None:",
                                "type": "added"
                            },
                            {
                                "content": "            if now - session.renewed > session._reissue_time:",
                                "type": "added"
                            },
                            {
                                "content": "                session.changed()",
                                "type": "added"
                            },
                            {
                                "content": "        return wrapped(session, *arg, **kw)",
                                "type": "context"
                            },
                            {
                                "content": "    accessed.__doc__ = wrapped.__doc__",
                                "type": "context"
                            },
                            {
                                "content": "    return accessed",
                                "type": "context"
                            }
                        ]
                    },
                    "modified_entities": [
                        {
                            "file_name": "pyramid/session.py",
                            "type": "function",
                            "name": "manage_accessed",
                            "content": "def manage_accessed(wrapped):\n    \"\"\" Decorator which causes a cookie to be renewed when an accessor\n    method is called.\"\"\"\n    def accessed(session, *arg, **kw):\n        session.accessed = now = int(time.time())\n        if now - session.renewed > session._reissue_time:\n            session.changed()\n        return wrapped(session, *arg, **kw)\n    accessed.__doc__ = wrapped.__doc__\n    return accessed",
                            "ast_type_str": "FunctionDef",
                            "start_lineno": 25,
                            "end_lineno": 34,
                            "parent": null
                        }
                    ],
                    "added_entities": [],
                    "deleted_entities": []
                },
                {
                    "descriptor": {
                        "old_range": {
                            "start": 165,
                            "length": 10
                        },
                        "new_range": {
                            "start": 166,
                            "length": 10
                        },
                        "section": "def BaseCookieSessionFactory("
                    },
                    "line_group": {
                        "all_lines": [
                            {
                                "content": "    Parameters:",
                                "type": "context"
                            },
                            {
                                "content": "",
                                "type": "context"
                            },
                            {
                                "content": "    ``serializer``",
                                "type": "context"
                            },
                            {
                                "content": "      An object with two methods: ``loads`` and ``dumps``.  The ``loads`` method",
                                "type": "deleted"
                            },
                            {
                                "content": "      should accept bytes and return a Python object.  The ``dumps`` method",
                                "type": "deleted"
                            },
                            {
                                "content": "      should accept a Python object and return bytes.  A ``ValueError`` should",
                                "type": "deleted"
                            },
                            {
                                "content": "      be raised for malformed inputs.",
                                "type": "deleted"
                            },
                            {
                                "content": "      An object with two methods: ``loads`` and ``dumps``.  The ``loads``",
                                "type": "added"
                            },
                            {
                                "content": "      method should accept bytes and return a Python object.  The ``dumps``",
                                "type": "added"
                            },
                            {
                                "content": "      method should accept a Python object and return bytes.  A ``ValueError``",
                                "type": "added"
                            },
                            {
                                "content": "      should be raised for malformed inputs.",
                                "type": "added"
                            },
                            {
                                "content": "",
                                "type": "context"
                            },
                            {
                                "content": "    ``cookie_name``",
                                "type": "context"
                            },
                            {
                                "content": "      The name of the cookie used for sessioning. Default: ``'session'``.",
                                "type": "context"
                            }
                        ]
                    },
                    "modified_entities": [
                        {
                            "file_name": "pyramid/session.py",
                            "type": "function",
                            "name": "BaseCookieSessionFactory",
                            "content": "def BaseCookieSessionFactory(\n    serializer,\n    cookie_name='session',\n    max_age=None,\n    path='/',\n    domain=None,\n    secure=False,\n    httponly=False,\n    timeout=1200,\n    reissue_time=0,\n    set_on_exception=True,\n    ):\n    \"\"\"\n    .. versionadded:: 1.5\n    \n    Configure a :term:`session factory` which will provide cookie-based\n    sessions.  The return value of this function is a :term:`session factory`,\n    which may be provided as the ``session_factory`` argument of a\n    :class:`pyramid.config.Configurator` constructor, or used as the\n    ``session_factory`` argument of the\n    :meth:`pyramid.config.Configurator.set_session_factory` method.\n\n    The session factory returned by this function will create sessions\n    which are limited to storing fewer than 4000 bytes of data (as the\n    payload must fit into a single cookie).\n\n    .. warning:\n\n       This class provides no protection from tampering and is only intended\n       to be used by framework authors to create their own cookie-based\n       session factories.\n\n    Parameters:\n\n    ``serializer``\n      An object with two methods: ``loads`` and ``dumps``.  The ``loads`` method\n      should accept bytes and return a Python object.  The ``dumps`` method\n      should accept a Python object and return bytes.  A ``ValueError`` should\n      be raised for malformed inputs.\n\n    ``cookie_name``\n      The name of the cookie used for sessioning. Default: ``'session'``.\n\n    ``max_age``\n      The maximum age of the cookie used for sessioning (in seconds).\n      Default: ``None`` (browser scope).\n\n    ``path``\n      The path used for the session cookie. Default: ``'/'``.\n\n    ``domain``\n      The domain used for the session cookie.  Default: ``None`` (no domain).\n\n    ``secure``\n      The 'secure' flag of the session cookie. Default: ``False``.\n\n    ``httponly``\n      Hide the cookie from Javascript by setting the 'HttpOnly' flag of the\n      session cookie. Default: ``False``.\n\n    ``timeout``\n      A number of seconds of inactivity before a session times out. If\n      ``None`` then the cookie never expires. This lifetime only applies\n      to the *value* within the cookie. Meaning that if the cookie expires\n      due to a lower ``max_age``, then this setting has no effect.\n      Default: ``1200``.\n\n    ``reissue_time``\n      The number of seconds that must pass before the cookie is automatically\n      reissued as the result of a request which accesses the session. The\n      duration is measured as the number of seconds since the last session\n      cookie was issued and 'now'.  If this value is ``0``, a new cookie\n      will be reissued on every request accessing the session. If ``None``\n      then the cookie's lifetime will never be extended.\n\n      A good rule of thumb: if you want auto-expired cookies based on\n      inactivity: set the ``timeout`` value to 1200 (20 mins) and set the\n      ``reissue_time`` value to perhaps a tenth of the ``timeout`` value\n      (120 or 2 mins).  It's nonsensical to set the ``timeout`` value lower\n      than the ``reissue_time`` value, as the ticket will never be reissued.\n      However, such a configuration is not explicitly prevented.\n\n      Default: ``0``.\n\n    ``set_on_exception``\n      If ``True``, set a session cookie even if an exception occurs\n      while rendering a view. Default: ``True``.\n\n    .. versionadded: 1.5a3\n    \"\"\"\n\n    @implementer(ISession)\n    class CookieSession(dict):\n        \"\"\" Dictionary-like session object \"\"\"\n\n        # configuration parameters\n        _cookie_name = cookie_name\n        _cookie_max_age = max_age\n        _cookie_path = path\n        _cookie_domain = domain\n        _cookie_secure = secure\n        _cookie_httponly = httponly\n        _cookie_on_exception = set_on_exception\n        _timeout = timeout\n        _reissue_time = reissue_time\n\n        # dirty flag\n        _dirty = False\n\n        def __init__(self, request):\n            self.request = request\n            now = time.time()\n            created = renewed = now\n            new = True\n            value = None\n            state = {}\n            cookieval = request.cookies.get(self._cookie_name)\n            if cookieval is not None:\n                try:\n                    value = serializer.loads(bytes_(cookieval))\n                except ValueError:\n                    # the cookie failed to deserialize, dropped\n                    value = None\n\n            if value is not None:\n                try:\n                    renewed, created, state = value\n                    new = False\n                    if now - renewed > self._timeout:\n                        # expire the session because it was not renewed\n                        # before the timeout threshold\n                        state = {}\n                except TypeError:\n                    # value failed to unpack properly or renewed was not\n                    # a numeric type so we'll fail deserialization here\n                    state = {}\n\n            self.created = created\n            self.accessed = renewed\n            self.renewed = renewed\n            self.new = new\n            dict.__init__(self, state)\n\n        # ISession methods\n        def changed(self):\n            if not self._dirty:\n                self._dirty = True\n                def set_cookie_callback(request, response):\n                    self._set_cookie(response)\n                    self.request = None # explicitly break cycle for gc\n                self.request.add_response_callback(set_cookie_callback)\n\n        def invalidate(self):\n            self.clear() # XXX probably needs to unset cookie\n\n        # non-modifying dictionary methods\n        get = manage_accessed(dict.get)\n        __getitem__ = manage_accessed(dict.__getitem__)\n        items = manage_accessed(dict.items)\n        values = manage_accessed(dict.values)\n        keys = manage_accessed(dict.keys)\n        __contains__ = manage_accessed(dict.__contains__)\n        __len__ = manage_accessed(dict.__len__)\n        __iter__ = manage_accessed(dict.__iter__)\n\n        if not PY3:\n            iteritems = manage_accessed(dict.iteritems)\n            itervalues = manage_accessed(dict.itervalues)\n            iterkeys = manage_accessed(dict.iterkeys)\n            has_key = manage_accessed(dict.has_key)\n\n        # modifying dictionary methods\n        clear = manage_changed(dict.clear)\n        update = manage_changed(dict.update)\n        setdefault = manage_changed(dict.setdefault)\n        pop = manage_changed(dict.pop)\n        popitem = manage_changed(dict.popitem)\n        __setitem__ = manage_changed(dict.__setitem__)\n        __delitem__ = manage_changed(dict.__delitem__)\n\n        # flash API methods\n        @manage_changed\n        def flash(self, msg, queue='', allow_duplicate=True):\n            storage = self.setdefault('_f_' + queue, [])\n            if allow_duplicate or (msg not in storage):\n                storage.append(msg)\n\n        @manage_changed\n        def pop_flash(self, queue=''):\n            storage = self.pop('_f_' + queue, [])\n            return storage\n\n        @manage_accessed\n        def peek_flash(self, queue=''):\n            storage = self.get('_f_' + queue, [])\n            return storage\n\n        # CSRF API methods\n        @manage_changed\n        def new_csrf_token(self):\n            token = text_(binascii.hexlify(os.urandom(20)))\n            self['_csrft_'] = token\n            return token\n\n        @manage_accessed\n        def get_csrf_token(self):\n            token = self.get('_csrft_', None)\n            if token is None:\n                token = self.new_csrf_token()\n            return token\n\n        # non-API methods\n        def _set_cookie(self, response):\n            if not self._cookie_on_exception:\n                exception = getattr(self.request, 'exception', None)\n                if exception is not None: # dont set a cookie during exceptions\n                    return False\n            cookieval = native_(serializer.dumps(\n                (self.accessed, self.created, dict(self))\n                ))\n            if len(cookieval) > 4064:\n                raise ValueError(\n                    'Cookie value is too long to store (%s bytes)' %\n                    len(cookieval)\n                    )\n            response.set_cookie(\n                self._cookie_name,\n                value=cookieval,\n                max_age=self._cookie_max_age,\n                path=self._cookie_path,\n                domain=self._cookie_domain,\n                secure=self._cookie_secure,\n                httponly=self._cookie_httponly,\n                )\n            return True\n\n    return CookieSession",
                            "ast_type_str": "FunctionDef",
                            "start_lineno": 133,
                            "end_lineno": 369,
                            "parent": null
                        }
                    ],
                    "added_entities": [],
                    "deleted_entities": []
                },
                {
                    "descriptor": {
                        "old_range": {
                            "start": 256,
                            "length": 17
                        },
                        "new_range": {
                            "start": 257,
                            "length": 24
                        },
                        "section": "def BaseCookieSessionFactory("
                    },
                    "line_group": {
                        "all_lines": [
                            {
                                "content": "",
                                "type": "context"
                            },
                            {
                                "content": "            if value is not None:",
                                "type": "context"
                            },
                            {
                                "content": "                try:",
                                "type": "context"
                            },
                            {
                                "content": "                    renewed, created, state = value",
                                "type": "deleted"
                            },
                            {
                                "content": "                    # since the value is not necessarily signed, we have",
                                "type": "added"
                            },
                            {
                                "content": "                    # to unpack it a little carefully",
                                "type": "added"
                            },
                            {
                                "content": "                    rval, cval, sval = value",
                                "type": "added"
                            },
                            {
                                "content": "                    renewed = float(rval)",
                                "type": "added"
                            },
                            {
                                "content": "                    created = float(cval)",
                                "type": "added"
                            },
                            {
                                "content": "                    state = sval",
                                "type": "added"
                            },
                            {
                                "content": "                    new = False",
                                "type": "context"
                            },
                            {
                                "content": "                    if now - renewed > self._timeout:",
                                "type": "deleted"
                            },
                            {
                                "content": "                        # expire the session because it was not renewed",
                                "type": "deleted"
                            },
                            {
                                "content": "                        # before the timeout threshold",
                                "type": "deleted"
                            },
                            {
                                "content": "                        state = {}",
                                "type": "deleted"
                            },
                            {
                                "content": "                except TypeError:",
                                "type": "deleted"
                            },
                            {
                                "content": "                except (TypeError, ValueError):",
                                "type": "added"
                            },
                            {
                                "content": "                    # value failed to unpack properly or renewed was not",
                                "type": "context"
                            },
                            {
                                "content": "                    # a numeric type so we'll fail deserialization here",
                                "type": "context"
                            },
                            {
                                "content": "                    state = {}",
                                "type": "context"
                            },
                            {
                                "content": "",
                                "type": "context"
                            },
                            {
                                "content": "            if self._timeout is not None:",
                                "type": "added"
                            },
                            {
                                "content": "                if now - renewed > self._timeout:",
                                "type": "added"
                            },
                            {
                                "content": "                    # expire the session because it was not renewed",
                                "type": "added"
                            },
                            {
                                "content": "                    # before the timeout threshold",
                                "type": "added"
                            },
                            {
                                "content": "                    state = {}",
                                "type": "added"
                            },
                            {
                                "content": "",
                                "type": "added"
                            },
                            {
                                "content": "            self.created = created",
                                "type": "context"
                            },
                            {
                                "content": "            self.accessed = renewed",
                                "type": "context"
                            },
                            {
                                "content": "            self.renewed = renewed",
                                "type": "context"
                            }
                        ]
                    },
                    "modified_entities": [
                        {
                            "file_name": "pyramid/session.py",
                            "type": "function",
                            "name": "BaseCookieSessionFactory",
                            "content": "def BaseCookieSessionFactory(\n    serializer,\n    cookie_name='session',\n    max_age=None,\n    path='/',\n    domain=None,\n    secure=False,\n    httponly=False,\n    timeout=1200,\n    reissue_time=0,\n    set_on_exception=True,\n    ):\n    \"\"\"\n    .. versionadded:: 1.5\n    \n    Configure a :term:`session factory` which will provide cookie-based\n    sessions.  The return value of this function is a :term:`session factory`,\n    which may be provided as the ``session_factory`` argument of a\n    :class:`pyramid.config.Configurator` constructor, or used as the\n    ``session_factory`` argument of the\n    :meth:`pyramid.config.Configurator.set_session_factory` method.\n\n    The session factory returned by this function will create sessions\n    which are limited to storing fewer than 4000 bytes of data (as the\n    payload must fit into a single cookie).\n\n    .. warning:\n\n       This class provides no protection from tampering and is only intended\n       to be used by framework authors to create their own cookie-based\n       session factories.\n\n    Parameters:\n\n    ``serializer``\n      An object with two methods: ``loads`` and ``dumps``.  The ``loads`` method\n      should accept bytes and return a Python object.  The ``dumps`` method\n      should accept a Python object and return bytes.  A ``ValueError`` should\n      be raised for malformed inputs.\n\n    ``cookie_name``\n      The name of the cookie used for sessioning. Default: ``'session'``.\n\n    ``max_age``\n      The maximum age of the cookie used for sessioning (in seconds).\n      Default: ``None`` (browser scope).\n\n    ``path``\n      The path used for the session cookie. Default: ``'/'``.\n\n    ``domain``\n      The domain used for the session cookie.  Default: ``None`` (no domain).\n\n    ``secure``\n      The 'secure' flag of the session cookie. Default: ``False``.\n\n    ``httponly``\n      Hide the cookie from Javascript by setting the 'HttpOnly' flag of the\n      session cookie. Default: ``False``.\n\n    ``timeout``\n      A number of seconds of inactivity before a session times out. If\n      ``None`` then the cookie never expires. This lifetime only applies\n      to the *value* within the cookie. Meaning that if the cookie expires\n      due to a lower ``max_age``, then this setting has no effect.\n      Default: ``1200``.\n\n    ``reissue_time``\n      The number of seconds that must pass before the cookie is automatically\n      reissued as the result of a request which accesses the session. The\n      duration is measured as the number of seconds since the last session\n      cookie was issued and 'now'.  If this value is ``0``, a new cookie\n      will be reissued on every request accessing the session. If ``None``\n      then the cookie's lifetime will never be extended.\n\n      A good rule of thumb: if you want auto-expired cookies based on\n      inactivity: set the ``timeout`` value to 1200 (20 mins) and set the\n      ``reissue_time`` value to perhaps a tenth of the ``timeout`` value\n      (120 or 2 mins).  It's nonsensical to set the ``timeout`` value lower\n      than the ``reissue_time`` value, as the ticket will never be reissued.\n      However, such a configuration is not explicitly prevented.\n\n      Default: ``0``.\n\n    ``set_on_exception``\n      If ``True``, set a session cookie even if an exception occurs\n      while rendering a view. Default: ``True``.\n\n    .. versionadded: 1.5a3\n    \"\"\"\n\n    @implementer(ISession)\n    class CookieSession(dict):\n        \"\"\" Dictionary-like session object \"\"\"\n\n        # configuration parameters\n        _cookie_name = cookie_name\n        _cookie_max_age = max_age\n        _cookie_path = path\n        _cookie_domain = domain\n        _cookie_secure = secure\n        _cookie_httponly = httponly\n        _cookie_on_exception = set_on_exception\n        _timeout = timeout\n        _reissue_time = reissue_time\n\n        # dirty flag\n        _dirty = False\n\n        def __init__(self, request):\n            self.request = request\n            now = time.time()\n            created = renewed = now\n            new = True\n            value = None\n            state = {}\n            cookieval = request.cookies.get(self._cookie_name)\n            if cookieval is not None:\n                try:\n                    value = serializer.loads(bytes_(cookieval))\n                except ValueError:\n                    # the cookie failed to deserialize, dropped\n                    value = None\n\n            if value is not None:\n                try:\n                    renewed, created, state = value\n                    new = False\n                    if now - renewed > self._timeout:\n                        # expire the session because it was not renewed\n                        # before the timeout threshold\n                        state = {}\n                except TypeError:\n                    # value failed to unpack properly or renewed was not\n                    # a numeric type so we'll fail deserialization here\n                    state = {}\n\n            self.created = created\n            self.accessed = renewed\n            self.renewed = renewed\n            self.new = new\n            dict.__init__(self, state)\n\n        # ISession methods\n        def changed(self):\n            if not self._dirty:\n                self._dirty = True\n                def set_cookie_callback(request, response):\n                    self._set_cookie(response)\n                    self.request = None # explicitly break cycle for gc\n                self.request.add_response_callback(set_cookie_callback)\n\n        def invalidate(self):\n            self.clear() # XXX probably needs to unset cookie\n\n        # non-modifying dictionary methods\n        get = manage_accessed(dict.get)\n        __getitem__ = manage_accessed(dict.__getitem__)\n        items = manage_accessed(dict.items)\n        values = manage_accessed(dict.values)\n        keys = manage_accessed(dict.keys)\n        __contains__ = manage_accessed(dict.__contains__)\n        __len__ = manage_accessed(dict.__len__)\n        __iter__ = manage_accessed(dict.__iter__)\n\n        if not PY3:\n            iteritems = manage_accessed(dict.iteritems)\n            itervalues = manage_accessed(dict.itervalues)\n            iterkeys = manage_accessed(dict.iterkeys)\n            has_key = manage_accessed(dict.has_key)\n\n        # modifying dictionary methods\n        clear = manage_changed(dict.clear)\n        update = manage_changed(dict.update)\n        setdefault = manage_changed(dict.setdefault)\n        pop = manage_changed(dict.pop)\n        popitem = manage_changed(dict.popitem)\n        __setitem__ = manage_changed(dict.__setitem__)\n        __delitem__ = manage_changed(dict.__delitem__)\n\n        # flash API methods\n        @manage_changed\n        def flash(self, msg, queue='', allow_duplicate=True):\n            storage = self.setdefault('_f_' + queue, [])\n            if allow_duplicate or (msg not in storage):\n                storage.append(msg)\n\n        @manage_changed\n        def pop_flash(self, queue=''):\n            storage = self.pop('_f_' + queue, [])\n            return storage\n\n        @manage_accessed\n        def peek_flash(self, queue=''):\n            storage = self.get('_f_' + queue, [])\n            return storage\n\n        # CSRF API methods\n        @manage_changed\n        def new_csrf_token(self):\n            token = text_(binascii.hexlify(os.urandom(20)))\n            self['_csrft_'] = token\n            return token\n\n        @manage_accessed\n        def get_csrf_token(self):\n            token = self.get('_csrft_', None)\n            if token is None:\n                token = self.new_csrf_token()\n            return token\n\n        # non-API methods\n        def _set_cookie(self, response):\n            if not self._cookie_on_exception:\n                exception = getattr(self.request, 'exception', None)\n                if exception is not None: # dont set a cookie during exceptions\n                    return False\n            cookieval = native_(serializer.dumps(\n                (self.accessed, self.created, dict(self))\n                ))\n            if len(cookieval) > 4064:\n                raise ValueError(\n                    'Cookie value is too long to store (%s bytes)' %\n                    len(cookieval)\n                    )\n            response.set_cookie(\n                self._cookie_name,\n                value=cookieval,\n                max_age=self._cookie_max_age,\n                path=self._cookie_path,\n                domain=self._cookie_domain,\n                secure=self._cookie_secure,\n                httponly=self._cookie_httponly,\n                )\n            return True\n\n    return CookieSession",
                            "ast_type_str": "FunctionDef",
                            "start_lineno": 133,
                            "end_lineno": 369,
                            "parent": null
                        }
                    ],
                    "added_entities": [],
                    "deleted_entities": []
                },
                {
                    "descriptor": {
                        "old_range": {
                            "start": 473,
                            "length": 8
                        },
                        "new_range": {
                            "start": 481,
                            "length": 8
                        },
                        "section": "def UnencryptedCookieSessionFactoryConfig("
                    },
                    "line_group": {
                        "all_lines": [
                            {
                                "content": "deprecated(",
                                "type": "context"
                            },
                            {
                                "content": "    'UnencryptedCookieSessionFactoryConfig',",
                                "type": "context"
                            },
                            {
                                "content": "    'The UnencryptedCookieSessionFactoryConfig callable is deprecated as of '",
                                "type": "context"
                            },
                            {
                                "content": "    'Pyramid 1.5.  Use ``pyramid.session.SignedCookieSessionFactory`` instead. '",
                                "type": "deleted"
                            },
                            {
                                "content": "    'Caveat: Cookies generated using SignedCookieSessionFactory are not '",
                                "type": "deleted"
                            },
                            {
                                "content": "    'Pyramid 1.5.  Use ``pyramid.session.SignedCookieSessionFactory`` instead.'",
                                "type": "added"
                            },
                            {
                                "content": "    ' Caveat: Cookies generated using SignedCookieSessionFactory are not '",
                                "type": "added"
                            },
                            {
                                "content": "    'compatible with cookies generated using UnencryptedCookieSessionFactory, '",
                                "type": "context"
                            },
                            {
                                "content": "    'so existing user session data will be destroyed if you switch to it.'",
                                "type": "context"
                            },
                            {
                                "content": "    )",
                                "type": "context"
                            }
                        ]
                    },
                    "modified_entities": [],
                    "added_entities": [
                        {
                            "file_name": "pyramid/session.py",
                            "type": "statement",
                            "name": "",
                            "content": "deprecated(\n    'UnencryptedCookieSessionFactoryConfig',\n    'The UnencryptedCookieSessionFactoryConfig callable is deprecated as of '\n    'Pyramid 1.5.  Use ``pyramid.session.SignedCookieSessionFactory`` instead.'\n    ' Caveat: Cookies generated using SignedCookieSessionFactory are not '\n    'compatible with cookies generated using UnencryptedCookieSessionFactory, '\n    'so existing user session data will be destroyed if you switch to it.'\n    )",
                            "ast_type_str": "Expr",
                            "start_lineno": 481,
                            "end_lineno": 488,
                            "parent": null
                        }
                    ],
                    "deleted_entities": [
                        {
                            "file_name": "pyramid/session.py",
                            "type": "statement",
                            "name": "",
                            "content": "deprecated(\n    'UnencryptedCookieSessionFactoryConfig',\n    'The UnencryptedCookieSessionFactoryConfig callable is deprecated as of '\n    'Pyramid 1.5.  Use ``pyramid.session.SignedCookieSessionFactory`` instead. '\n    'Caveat: Cookies generated using SignedCookieSessionFactory are not '\n    'compatible with cookies generated using UnencryptedCookieSessionFactory, '\n    'so existing user session data will be destroyed if you switch to it.'\n    )",
                            "ast_type_str": "Expr",
                            "start_lineno": 473,
                            "end_lineno": 480,
                            "parent": null
                        }
                    ]
                },
                {
                    "descriptor": {
                        "old_range": {
                            "start": 578,
                            "length": 11
                        },
                        "new_range": {
                            "start": 586,
                            "length": 11
                        },
                        "section": "def SignedCookieSessionFactory("
                    },
                    "line_group": {
                        "all_lines": [
                            {
                                "content": "      while rendering a view. Default: ``True``.",
                                "type": "context"
                            },
                            {
                                "content": "",
                                "type": "context"
                            },
                            {
                                "content": "    ``serializer``",
                                "type": "context"
                            },
                            {
                                "content": "      An object with two methods: ``loads`` and ``dumps``.  The ``loads`` method",
                                "type": "deleted"
                            },
                            {
                                "content": "      should accept bytes and return a Python object.  The ``dumps`` method",
                                "type": "deleted"
                            },
                            {
                                "content": "      should accept a Python object and return bytes.  A ``ValueError`` should",
                                "type": "deleted"
                            },
                            {
                                "content": "      be raised for malformed inputs.  If a serializer is not passed, the",
                                "type": "deleted"
                            },
                            {
                                "content": "      :class:`pyramid.session.PickleSerializer` serializer will be used.",
                                "type": "deleted"
                            },
                            {
                                "content": "      An object with two methods: ``loads`` and ``dumps``.  The ``loads``",
                                "type": "added"
                            },
                            {
                                "content": "      method should accept bytes and return a Python object.  The ``dumps``",
                                "type": "added"
                            },
                            {
                                "content": "      method should accept a Python object and return bytes.  A ``ValueError``",
                                "type": "added"
                            },
                            {
                                "content": "      should be raised for malformed inputs.  If a serializer is not passed,",
                                "type": "added"
                            },
                            {
                                "content": "      the :class:`pyramid.session.PickleSerializer` serializer will be used.",
                                "type": "added"
                            },
                            {
                                "content": "",
                                "type": "context"
                            },
                            {
                                "content": "    .. versionadded: 1.5a3",
                                "type": "context"
                            },
                            {
                                "content": "    \"\"\"",
                                "type": "context"
                            }
                        ]
                    },
                    "modified_entities": [
                        {
                            "file_name": "pyramid/session.py",
                            "type": "function",
                            "name": "SignedCookieSessionFactory",
                            "content": "def SignedCookieSessionFactory(\n    secret,\n    cookie_name='session',\n    max_age=None,\n    path='/',\n    domain=None,\n    secure=False,\n    httponly=False,\n    set_on_exception=True,\n    timeout=1200,\n    reissue_time=0,\n    hashalg='sha512',\n    salt='pyramid.session.',\n    serializer=None,\n    ):\n    \"\"\"\n    .. versionadded:: 1.5\n    \n    Configure a :term:`session factory` which will provide signed\n    cookie-based sessions.  The return value of this\n    function is a :term:`session factory`, which may be provided as\n    the ``session_factory`` argument of a\n    :class:`pyramid.config.Configurator` constructor, or used\n    as the ``session_factory`` argument of the\n    :meth:`pyramid.config.Configurator.set_session_factory`\n    method.\n\n    The session factory returned by this function will create sessions\n    which are limited to storing fewer than 4000 bytes of data (as the\n    payload must fit into a single cookie).\n\n    Parameters:\n\n    ``secret``\n      A string which is used to sign the cookie. The secret should be at\n      least as long as the block size of the selected hash algorithm. For\n      ``sha512`` this would mean a 128 bit (64 character) secret.  It should\n      be unique within the set of secret values provided to Pyramid for\n      its various subsystems (see :ref:`admonishment_against_secret_sharing`).\n\n    ``hashalg``\n      The HMAC digest algorithm to use for signing. The algorithm must be\n      supported by the :mod:`hashlib` library. Default: ``'sha512'``.\n\n    ``salt``\n      A namespace to avoid collisions between different uses of a shared\n      secret. Reusing a secret for different parts of an application is\n      strongly discouraged (see :ref:`admonishment_against_secret_sharing`).\n      Default: ``'pyramid.session.'``.\n\n    ``cookie_name``\n      The name of the cookie used for sessioning. Default: ``'session'``.\n\n    ``max_age``\n      The maximum age of the cookie used for sessioning (in seconds).\n      Default: ``None`` (browser scope).\n\n    ``path``\n      The path used for the session cookie. Default: ``'/'``.\n\n    ``domain``\n      The domain used for the session cookie.  Default: ``None`` (no domain).\n\n    ``secure``\n      The 'secure' flag of the session cookie. Default: ``False``.\n\n    ``httponly``\n      Hide the cookie from Javascript by setting the 'HttpOnly' flag of the\n      session cookie. Default: ``False``.\n\n    ``timeout``\n      A number of seconds of inactivity before a session times out. If\n      ``None`` then the cookie never expires. This lifetime only applies\n      to the *value* within the cookie. Meaning that if the cookie expires\n      due to a lower ``max_age``, then this setting has no effect.\n      Default: ``1200``.\n\n    ``reissue_time``\n      The number of seconds that must pass before the cookie is automatically\n      reissued as the result of accessing the session. The\n      duration is measured as the number of seconds since the last session\n      cookie was issued and 'now'.  If this value is ``0``, a new cookie\n      will be reissued on every request accessing the session. If ``None``\n      then the cookie's lifetime will never be extended.\n\n      A good rule of thumb: if you want auto-expired cookies based on\n      inactivity: set the ``timeout`` value to 1200 (20 mins) and set the\n      ``reissue_time`` value to perhaps a tenth of the ``timeout`` value\n      (120 or 2 mins).  It's nonsensical to set the ``timeout`` value lower\n      than the ``reissue_time`` value, as the ticket will never be reissued.\n      However, such a configuration is not explicitly prevented.\n\n      Default: ``0``.\n\n    ``set_on_exception``\n      If ``True``, set a session cookie even if an exception occurs\n      while rendering a view. Default: ``True``.\n\n    ``serializer``\n      An object with two methods: ``loads`` and ``dumps``.  The ``loads`` method\n      should accept bytes and return a Python object.  The ``dumps`` method\n      should accept a Python object and return bytes.  A ``ValueError`` should\n      be raised for malformed inputs.  If a serializer is not passed, the\n      :class:`pyramid.session.PickleSerializer` serializer will be used.\n\n    .. versionadded: 1.5a3\n    \"\"\"\n    if serializer is None:\n        serializer = PickleSerializer()\n\n    signed_serializer = SignedSerializer(\n        secret,\n        salt, \n        hashalg,\n        serializer=serializer,\n        )\n\n    return BaseCookieSessionFactory(\n        signed_serializer,\n        cookie_name=cookie_name,\n        max_age=max_age,\n        path=path,\n        domain=domain,\n        secure=secure,\n        httponly=httponly,\n        timeout=timeout,\n        reissue_time=reissue_time,\n        set_on_exception=set_on_exception,\n    )",
                            "ast_type_str": "FunctionDef",
                            "start_lineno": 482,
                            "end_lineno": 610,
                            "parent": null
                        }
                    ],
                    "added_entities": [],
                    "deleted_entities": []
                },
                {
                    "descriptor": {
                        "old_range": {
                            "start": 591,
                            "length": 7
                        },
                        "new_range": {
                            "start": 599,
                            "length": 7
                        },
                        "section": "def SignedCookieSessionFactory("
                    },
                    "line_group": {
                        "all_lines": [
                            {
                                "content": "",
                                "type": "context"
                            },
                            {
                                "content": "    signed_serializer = SignedSerializer(",
                                "type": "context"
                            },
                            {
                                "content": "        secret,",
                                "type": "context"
                            },
                            {
                                "content": "        salt, ",
                                "type": "deleted"
                            },
                            {
                                "content": "        salt,",
                                "type": "added"
                            },
                            {
                                "content": "        hashalg,",
                                "type": "context"
                            },
                            {
                                "content": "        serializer=serializer,",
                                "type": "context"
                            },
                            {
                                "content": "        )",
                                "type": "context"
                            }
                        ]
                    },
                    "modified_entities": [
                        {
                            "file_name": "pyramid/session.py",
                            "type": "function",
                            "name": "SignedCookieSessionFactory",
                            "content": "def SignedCookieSessionFactory(\n    secret,\n    cookie_name='session',\n    max_age=None,\n    path='/',\n    domain=None,\n    secure=False,\n    httponly=False,\n    set_on_exception=True,\n    timeout=1200,\n    reissue_time=0,\n    hashalg='sha512',\n    salt='pyramid.session.',\n    serializer=None,\n    ):\n    \"\"\"\n    .. versionadded:: 1.5\n    \n    Configure a :term:`session factory` which will provide signed\n    cookie-based sessions.  The return value of this\n    function is a :term:`session factory`, which may be provided as\n    the ``session_factory`` argument of a\n    :class:`pyramid.config.Configurator` constructor, or used\n    as the ``session_factory`` argument of the\n    :meth:`pyramid.config.Configurator.set_session_factory`\n    method.\n\n    The session factory returned by this function will create sessions\n    which are limited to storing fewer than 4000 bytes of data (as the\n    payload must fit into a single cookie).\n\n    Parameters:\n\n    ``secret``\n      A string which is used to sign the cookie. The secret should be at\n      least as long as the block size of the selected hash algorithm. For\n      ``sha512`` this would mean a 128 bit (64 character) secret.  It should\n      be unique within the set of secret values provided to Pyramid for\n      its various subsystems (see :ref:`admonishment_against_secret_sharing`).\n\n    ``hashalg``\n      The HMAC digest algorithm to use for signing. The algorithm must be\n      supported by the :mod:`hashlib` library. Default: ``'sha512'``.\n\n    ``salt``\n      A namespace to avoid collisions between different uses of a shared\n      secret. Reusing a secret for different parts of an application is\n      strongly discouraged (see :ref:`admonishment_against_secret_sharing`).\n      Default: ``'pyramid.session.'``.\n\n    ``cookie_name``\n      The name of the cookie used for sessioning. Default: ``'session'``.\n\n    ``max_age``\n      The maximum age of the cookie used for sessioning (in seconds).\n      Default: ``None`` (browser scope).\n\n    ``path``\n      The path used for the session cookie. Default: ``'/'``.\n\n    ``domain``\n      The domain used for the session cookie.  Default: ``None`` (no domain).\n\n    ``secure``\n      The 'secure' flag of the session cookie. Default: ``False``.\n\n    ``httponly``\n      Hide the cookie from Javascript by setting the 'HttpOnly' flag of the\n      session cookie. Default: ``False``.\n\n    ``timeout``\n      A number of seconds of inactivity before a session times out. If\n      ``None`` then the cookie never expires. This lifetime only applies\n      to the *value* within the cookie. Meaning that if the cookie expires\n      due to a lower ``max_age``, then this setting has no effect.\n      Default: ``1200``.\n\n    ``reissue_time``\n      The number of seconds that must pass before the cookie is automatically\n      reissued as the result of accessing the session. The\n      duration is measured as the number of seconds since the last session\n      cookie was issued and 'now'.  If this value is ``0``, a new cookie\n      will be reissued on every request accessing the session. If ``None``\n      then the cookie's lifetime will never be extended.\n\n      A good rule of thumb: if you want auto-expired cookies based on\n      inactivity: set the ``timeout`` value to 1200 (20 mins) and set the\n      ``reissue_time`` value to perhaps a tenth of the ``timeout`` value\n      (120 or 2 mins).  It's nonsensical to set the ``timeout`` value lower\n      than the ``reissue_time`` value, as the ticket will never be reissued.\n      However, such a configuration is not explicitly prevented.\n\n      Default: ``0``.\n\n    ``set_on_exception``\n      If ``True``, set a session cookie even if an exception occurs\n      while rendering a view. Default: ``True``.\n\n    ``serializer``\n      An object with two methods: ``loads`` and ``dumps``.  The ``loads`` method\n      should accept bytes and return a Python object.  The ``dumps`` method\n      should accept a Python object and return bytes.  A ``ValueError`` should\n      be raised for malformed inputs.  If a serializer is not passed, the\n      :class:`pyramid.session.PickleSerializer` serializer will be used.\n\n    .. versionadded: 1.5a3\n    \"\"\"\n    if serializer is None:\n        serializer = PickleSerializer()\n\n    signed_serializer = SignedSerializer(\n        secret,\n        salt, \n        hashalg,\n        serializer=serializer,\n        )\n\n    return BaseCookieSessionFactory(\n        signed_serializer,\n        cookie_name=cookie_name,\n        max_age=max_age,\n        path=path,\n        domain=domain,\n        secure=secure,\n        httponly=httponly,\n        timeout=timeout,\n        reissue_time=reissue_time,\n        set_on_exception=set_on_exception,\n    )",
                            "ast_type_str": "FunctionDef",
                            "start_lineno": 482,
                            "end_lineno": 610,
                            "parent": null
                        }
                    ],
                    "added_entities": [],
                    "deleted_entities": []
                }
            ]
        },
        {
            "old_file_content": "import json\nimport unittest\nfrom pyramid import testing\n\nclass SharedCookieSessionTests(object):\n\n    def test_ctor_no_cookie(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        self.assertEqual(dict(session), {})\n\n    def test_instance_conforms(self):\n        from zope.interface.verify import verifyObject\n        from pyramid.interfaces import ISession\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        verifyObject(ISession, session)\n\n    def test_ctor_with_cookie_still_valid(self):\n        import time\n        request = testing.DummyRequest()\n        cookieval = self._serialize((time.time(), 0, {'state': 1}))\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request)\n        self.assertEqual(dict(session), {'state':1})\n\n    def test_ctor_with_cookie_expired(self):\n        request = testing.DummyRequest()\n        cookieval = self._serialize((0, 0, {'state': 1}))\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request)\n        self.assertEqual(dict(session), {})\n\n    def test_ctor_with_bad_cookie_cannot_deserialize(self):\n        request = testing.DummyRequest()\n        request.cookies['session'] = 'abc'\n        session = self._makeOne(request)\n        self.assertEqual(dict(session), {})\n\n    def test_ctor_with_bad_cookie_not_tuple(self):\n        request = testing.DummyRequest()\n        cookieval = self._serialize('abc')\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request)\n        self.assertEqual(dict(session), {})\n\n    def test_timeout(self):\n        import time\n        request = testing.DummyRequest()\n        cookieval = self._serialize((time.time() - 5, 0, {'state': 1}))\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, timeout=1)\n        self.assertEqual(dict(session), {})\n\n    def test_changed(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        self.assertEqual(session.changed(), None)\n        self.assertTrue(session._dirty)\n\n    def test_invalidate(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        session['a'] = 1\n        self.assertEqual(session.invalidate(), None)\n        self.assertFalse('a' in session)\n\n    def test_reissue_triggered(self):\n        import time\n        request = testing.DummyRequest()\n        cookieval = self._serialize((time.time() - 2, 0, {'state': 1}))\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request)\n        self.assertEqual(session['state'], 1)\n        self.assertTrue(session._dirty)\n\n    def test__set_cookie_on_exception(self):\n        request = testing.DummyRequest()\n        request.exception = True\n        session = self._makeOne(request)\n        session._cookie_on_exception = False\n        response = DummyResponse()\n        self.assertEqual(session._set_cookie(response), False)\n\n    def test__set_cookie_on_exception_no_request_exception(self):\n        import webob\n        request = testing.DummyRequest()\n        request.exception = None\n        session = self._makeOne(request)\n        session._cookie_on_exception = False\n        response = webob.Response()\n        self.assertEqual(session._set_cookie(response), True)\n        self.assertEqual(response.headerlist[-1][0], 'Set-Cookie')\n\n    def test__set_cookie_cookieval_too_long(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        session['abc'] = 'x'*100000\n        response = DummyResponse()\n        self.assertRaises(ValueError, session._set_cookie, response)\n\n    def test__set_cookie_real_webob_response(self):\n        import webob\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        session['abc'] = 'x'\n        response = webob.Response()\n        self.assertEqual(session._set_cookie(response), True)\n        self.assertEqual(response.headerlist[-1][0], 'Set-Cookie')\n\n    def test__set_cookie_options(self):\n        from pyramid.response import Response\n        request = testing.DummyRequest()\n        request.exception = None\n        session = self._makeOne(request,\n                                cookie_name='abc',\n                                path='/foo',\n                                domain='localhost',\n                                secure=True,\n                                httponly=True,\n                                )\n        session['abc'] = 'x'\n        response = Response()\n        self.assertEqual(session._set_cookie(response), True)\n        cookieval = response.headerlist[-1][1]\n        val, domain, path, secure, httponly = [x.strip() for x in\n                                               cookieval.split(';')]\n        self.assertTrue(val.startswith('abc='))\n        self.assertEqual(domain, 'Domain=localhost')\n        self.assertEqual(path, 'Path=/foo')\n        self.assertEqual(secure, 'secure')\n        self.assertEqual(httponly, 'HttpOnly')\n\n    def test_flash_default(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        session.flash('msg1')\n        session.flash('msg2')\n        self.assertEqual(session['_f_'], ['msg1', 'msg2'])\n\n    def test_flash_allow_duplicate_false(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        session.flash('msg1')\n        session.flash('msg1', allow_duplicate=False)\n        self.assertEqual(session['_f_'], ['msg1'])\n\n    def test_flash_allow_duplicate_true_and_msg_not_in_storage(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        session.flash('msg1', allow_duplicate=True)\n        self.assertEqual(session['_f_'], ['msg1'])\n\n    def test_flash_allow_duplicate_false_and_msg_not_in_storage(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        session.flash('msg1', allow_duplicate=False)\n        self.assertEqual(session['_f_'], ['msg1'])\n\n    def test_flash_mixed(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        session.flash('warn1', 'warn')\n        session.flash('warn2', 'warn')\n        session.flash('err1', 'error')\n        session.flash('err2', 'error')\n        self.assertEqual(session['_f_warn'], ['warn1', 'warn2'])\n\n    def test_pop_flash_default_queue(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        queue = ['one', 'two']\n        session['_f_'] = queue\n        result = session.pop_flash()\n        self.assertEqual(result, queue)\n        self.assertEqual(session.get('_f_'), None)\n\n    def test_pop_flash_nodefault_queue(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        queue = ['one', 'two']\n        session['_f_error'] = queue\n        result = session.pop_flash('error')\n        self.assertEqual(result, queue)\n        self.assertEqual(session.get('_f_error'), None)\n\n    def test_peek_flash_default_queue(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        queue = ['one', 'two']\n        session['_f_'] = queue\n        result = session.peek_flash()\n        self.assertEqual(result, queue)\n        self.assertEqual(session.get('_f_'), queue)\n\n    def test_peek_flash_nodefault_queue(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        queue = ['one', 'two']\n        session['_f_error'] = queue\n        result = session.peek_flash('error')\n        self.assertEqual(result, queue)\n        self.assertEqual(session.get('_f_error'), queue)\n\n    def test_new_csrf_token(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        token = session.new_csrf_token()\n        self.assertEqual(token, session['_csrft_'])\n\n    def test_get_csrf_token(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        session['_csrft_'] = 'token'\n        token = session.get_csrf_token()\n        self.assertEqual(token, 'token')\n        self.assertTrue('_csrft_' in session)\n\n    def test_get_csrf_token_new(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        token = session.get_csrf_token()\n        self.assertTrue(token)\n        self.assertTrue('_csrft_' in session)\n\n    def test_no_set_cookie_with_exception(self):\n        import webob\n        request = testing.DummyRequest()\n        request.exception = True\n        session = self._makeOne(request, set_on_exception=False)\n        session['a'] = 1\n        callbacks = request.response_callbacks\n        self.assertEqual(len(callbacks), 1)\n        response = webob.Response()\n        result = callbacks[0](request, response)\n        self.assertEqual(result, None)\n        self.assertFalse('Set-Cookie' in dict(response.headerlist))\n\n    def test_set_cookie_with_exception(self):\n        import webob\n        request = testing.DummyRequest()\n        request.exception = True\n        session = self._makeOne(request)\n        session['a'] = 1\n        callbacks = request.response_callbacks\n        self.assertEqual(len(callbacks), 1)\n        response = webob.Response()\n        result = callbacks[0](request, response)\n        self.assertEqual(result, None)\n        self.assertTrue('Set-Cookie' in dict(response.headerlist))\n\n    def test_cookie_is_set(self):\n        import webob\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        session['a'] = 1\n        callbacks = request.response_callbacks\n        self.assertEqual(len(callbacks), 1)\n        response = webob.Response()\n        result = callbacks[0](request, response)\n        self.assertEqual(result, None)\n        self.assertTrue('Set-Cookie' in dict(response.headerlist))\n\nclass TestBaseCookieSession(SharedCookieSessionTests, unittest.TestCase):\n    def _makeOne(self, request, **kw):\n        from pyramid.session import BaseCookieSessionFactory\n        serializer = DummySerializer()\n        return BaseCookieSessionFactory(serializer, **kw)(request)\n\n    def _serialize(self, value):\n        return json.dumps(value)\n\n    def test_reissue_not_triggered(self):\n        import time\n        request = testing.DummyRequest()\n        cookieval = self._serialize((time.time(), 0, {'state': 1}))\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, reissue_time=1)\n        self.assertEqual(session['state'], 1)\n        self.assertFalse(session._dirty)\n\nclass TestSignedCookieSession(SharedCookieSessionTests, unittest.TestCase):\n    def _makeOne(self, request, **kw):\n        from pyramid.session import SignedCookieSessionFactory\n        kw.setdefault('secret', 'secret')\n        return SignedCookieSessionFactory(**kw)(request)\n\n    def _serialize(self, value, salt=b'pyramid.session.', hashalg='sha512'):\n        import base64\n        import hashlib\n        import hmac\n        import pickle\n\n        digestmod = lambda: hashlib.new(hashalg)\n        cstruct = pickle.dumps(value, pickle.HIGHEST_PROTOCOL)\n        sig = hmac.new(salt + b'secret', cstruct, digestmod).digest()\n        return base64.urlsafe_b64encode(sig + cstruct).rstrip(b'=')\n\n    def test_reissue_not_triggered(self):\n        import time\n        request = testing.DummyRequest()\n        cookieval = self._serialize((time.time(), 0, {'state': 1}))\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, reissue_time=1)\n        self.assertEqual(session['state'], 1)\n        self.assertFalse(session._dirty)\n\n    def test_custom_salt(self):\n        import time\n        request = testing.DummyRequest()\n        cookieval = self._serialize((time.time(), 0, {'state': 1}), salt=b'f.')\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, salt=b'f.')\n        self.assertEqual(session['state'], 1)\n\n    def test_salt_mismatch(self):\n        import time\n        request = testing.DummyRequest()\n        cookieval = self._serialize((time.time(), 0, {'state': 1}), salt=b'f.')\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, salt=b'g.')\n        self.assertEqual(session, {})\n\n    def test_custom_hashalg(self):\n        import time\n        request = testing.DummyRequest()\n        cookieval = self._serialize((time.time(), 0, {'state': 1}),\n                                    hashalg='sha1')\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, hashalg='sha1')\n        self.assertEqual(session['state'], 1)\n\n    def test_hashalg_mismatch(self):\n        import time\n        request = testing.DummyRequest()\n        cookieval = self._serialize((time.time(), 0, {'state': 1}),\n                                    hashalg='sha1')\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, hashalg='sha256')\n        self.assertEqual(session, {})\n\n    def test_secret_mismatch(self):\n        import time\n        request = testing.DummyRequest()\n        cookieval = self._serialize((time.time(), 0, {'state': 1}))\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, secret='evilsecret')\n        self.assertEqual(session, {})\n\n    def test_custom_serializer(self):\n        import base64\n        from hashlib import sha512\n        import hmac\n        import time\n        request = testing.DummyRequest()\n        serializer = DummySerializer()\n        cstruct = serializer.dumps((time.time(), 0, {'state': 1}))\n        sig = hmac.new(b'pyramid.session.secret', cstruct, sha512).digest()\n        cookieval = base64.urlsafe_b64encode(sig + cstruct).rstrip(b'=')\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, serializer=serializer)\n        self.assertEqual(session['state'], 1)\n\n    def test_invalid_data_size(self):\n        from hashlib import sha512\n        import base64\n        request = testing.DummyRequest()\n        num_bytes = sha512().digest_size - 1\n        cookieval = base64.b64encode(b' ' * num_bytes)\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request)\n        self.assertEqual(session, {})\n\n    def test_very_long_key(self):\n        verylongkey = b'a' * 1024\n        import webob\n        request = testing.DummyRequest()\n        session = self._makeOne(request, secret=verylongkey)\n        session['a'] = 1\n        callbacks = request.response_callbacks\n        self.assertEqual(len(callbacks), 1)\n        response = webob.Response()\n\n        try:\n            result = callbacks[0](request, response)\n        except TypeError: # pragma: no cover\n            self.fail('HMAC failed to initialize due to key length.')\n\n        self.assertEqual(result, None)\n        self.assertTrue('Set-Cookie' in dict(response.headerlist))\n\nclass TestUnencryptedCookieSession(SharedCookieSessionTests, unittest.TestCase):\n    def setUp(self):\n        super(TestUnencryptedCookieSession, self).setUp()\n        from zope.deprecation import __show__\n        __show__.off()\n\n    def tearDown(self):\n        super(TestUnencryptedCookieSession, self).tearDown()\n        from zope.deprecation import __show__\n        __show__.on()\n        \n    def _makeOne(self, request, **kw):\n        from pyramid.session import UnencryptedCookieSessionFactoryConfig\n        self._rename_cookie_var(kw, 'path', 'cookie_path')\n        self._rename_cookie_var(kw, 'domain', 'cookie_domain')\n        self._rename_cookie_var(kw, 'secure', 'cookie_secure')\n        self._rename_cookie_var(kw, 'httponly', 'cookie_httponly')\n        self._rename_cookie_var(kw, 'set_on_exception', 'cookie_on_exception')\n        return UnencryptedCookieSessionFactoryConfig('secret', **kw)(request)\n\n    def _rename_cookie_var(self, kw, src, dest):\n        if src in kw:\n            kw.setdefault(dest, kw.pop(src))\n\n    def _serialize(self, value):\n        from pyramid.compat import bytes_\n        from pyramid.session import signed_serialize\n        return bytes_(signed_serialize(value, 'secret'))\n\n    def test_serialize_option(self):\n        from pyramid.response import Response\n        secret = 'secret'\n        request = testing.DummyRequest()\n        session = self._makeOne(request,\n            signed_serialize=dummy_signed_serialize)\n        session['key'] = 'value'\n        response = Response()\n        self.assertEqual(session._set_cookie(response), True)\n        cookie = response.headerlist[-1][1]\n        expected_cookieval = dummy_signed_serialize(\n            (session.accessed, session.created, {'key': 'value'}), secret)\n        response = Response()\n        response.set_cookie('session', expected_cookieval)\n        expected_cookie = response.headerlist[-1][1]\n        self.assertEqual(cookie, expected_cookie)\n\n    def test_deserialize_option(self):\n        import time\n        secret = 'secret'\n        request = testing.DummyRequest()\n        accessed = time.time()\n        state = {'key': 'value'}\n        cookieval = dummy_signed_serialize((accessed, accessed, state), secret)\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request,\n            signed_deserialize=dummy_signed_deserialize)\n        self.assertEqual(dict(session), state)\n\ndef dummy_signed_serialize(data, secret):\n    import base64\n    from pyramid.compat import pickle, bytes_\n    pickled = pickle.dumps(data)\n    return base64.b64encode(bytes_(secret)) + base64.b64encode(pickled)\n\ndef dummy_signed_deserialize(serialized, secret):\n    import base64\n    from pyramid.compat import pickle, bytes_\n    serialized_data = base64.b64decode(\n        serialized[len(base64.b64encode(bytes_(secret))):])\n    return pickle.loads(serialized_data)\n\nclass Test_manage_accessed(unittest.TestCase):\n    def _makeOne(self, wrapped):\n        from pyramid.session import manage_accessed\n        return manage_accessed(wrapped)\n\n    def test_accessed_set(self):\n        request = testing.DummyRequest()\n        session = DummySessionFactory(request)\n        session.renewed = 0\n        wrapper = self._makeOne(session.__class__.get)\n        wrapper(session, 'a')\n        self.assertNotEqual(session.accessed, None)\n        self.assertTrue(session._dirty)\n\n    def test_accessed_without_renew(self):\n        import time\n        request = testing.DummyRequest()\n        session = DummySessionFactory(request)\n        session._reissue_time = 5\n        session.renewed = time.time()\n        wrapper = self._makeOne(session.__class__.get)\n        wrapper(session, 'a')\n        self.assertNotEqual(session.accessed, None)\n        self.assertFalse(session._dirty)\n\n    def test_already_dirty(self):\n        request = testing.DummyRequest()\n        session = DummySessionFactory(request)\n        session.renewed = 0\n        session._dirty = True\n        session['a'] = 1\n        wrapper = self._makeOne(session.__class__.get)\n        self.assertEqual(wrapper.__doc__, session.get.__doc__)\n        result = wrapper(session, 'a')\n        self.assertEqual(result, 1)\n        callbacks = request.response_callbacks\n        self.assertEqual(len(callbacks), 0)\n\nclass Test_manage_changed(unittest.TestCase):\n    def _makeOne(self, wrapped):\n        from pyramid.session import manage_changed\n        return manage_changed(wrapped)\n\n    def test_it(self):\n        request = testing.DummyRequest()\n        session = DummySessionFactory(request)\n        wrapper = self._makeOne(session.__class__.__setitem__)\n        wrapper(session, 'a', 1)\n        self.assertNotEqual(session.accessed, None)\n        self.assertTrue(session._dirty)\n\ndef serialize(data, secret):\n    import hmac\n    import base64\n    from hashlib import sha1\n    from pyramid.compat import bytes_\n    from pyramid.compat import native_\n    from pyramid.compat import pickle\n    pickled = pickle.dumps(data, pickle.HIGHEST_PROTOCOL)\n    sig = hmac.new(bytes_(secret), pickled, sha1).hexdigest()\n    return sig + native_(base64.b64encode(pickled))\n\nclass Test_signed_serialize(unittest.TestCase):\n    def _callFUT(self, data, secret):\n        from pyramid.session import signed_serialize\n        return signed_serialize(data, secret)\n\n    def test_it(self):\n        expected = serialize('123', 'secret')\n        result = self._callFUT('123', 'secret')\n        self.assertEqual(result, expected)\n        \nclass Test_signed_deserialize(unittest.TestCase):\n    def _callFUT(self, serialized, secret, hmac=None):\n        if hmac is None:\n            import hmac\n        from pyramid.session import signed_deserialize\n        return signed_deserialize(serialized, secret, hmac=hmac)\n\n    def test_it(self):\n        serialized = serialize('123', 'secret')\n        result = self._callFUT(serialized, 'secret')\n        self.assertEqual(result, '123')\n\n    def test_invalid_bits(self):\n        serialized = serialize('123', 'secret')\n        self.assertRaises(ValueError, self._callFUT, serialized, 'seekrit')\n\n    def test_invalid_len(self):\n        class hmac(object):\n            def new(self, *arg):\n                return self\n            def hexdigest(self):\n                return '1234'\n        serialized = serialize('123', 'secret123')\n        self.assertRaises(ValueError, self._callFUT, serialized, 'secret',\n                          hmac=hmac())\n        \n    def test_it_bad_encoding(self):\n        serialized = 'bad' + serialize('123', 'secret')\n        self.assertRaises(ValueError, self._callFUT, serialized, 'secret')\n\nclass Test_check_csrf_token(unittest.TestCase):\n    def _callFUT(self, *args, **kwargs):\n        from ..session import check_csrf_token\n        return check_csrf_token(*args, **kwargs)\n\n    def test_success_token(self):\n        request = testing.DummyRequest()\n        request.params['csrf_token'] = request.session.get_csrf_token()\n        self.assertEqual(self._callFUT(request, token='csrf_token'), True)\n\n    def test_success_header(self):\n        request = testing.DummyRequest()\n        request.headers['X-CSRF-Token'] = request.session.get_csrf_token()\n        self.assertEqual(self._callFUT(request, header='X-CSRF-Token'), True)\n\n    def test_success_default_token(self):\n        request = testing.DummyRequest()\n        request.params['csrf_token'] = request.session.get_csrf_token()\n        self.assertEqual(self._callFUT(request), True)\n\n    def test_success_default_header(self):\n        request = testing.DummyRequest()\n        request.headers['X-CSRF-Token'] = request.session.get_csrf_token()\n        self.assertEqual(self._callFUT(request), True)\n\n    def test_failure_raises(self):\n        from pyramid.exceptions import BadCSRFToken\n        request = testing.DummyRequest()\n        self.assertRaises(BadCSRFToken, self._callFUT, request,\n                          'csrf_token')\n\n    def test_failure_no_raises(self):\n        request = testing.DummyRequest()\n        result = self._callFUT(request, 'csrf_token', raises=False)\n        self.assertEqual(result, False)\n\nclass DummySerializer(object):\n    def dumps(self, value):\n        return json.dumps(value).encode('utf-8')\n\n    def loads(self, value):\n        return json.loads(value.decode('utf-8'))\n\nclass DummySessionFactory(dict):\n    _dirty = False\n    _cookie_name = 'session'\n    _cookie_max_age = None\n    _cookie_path = '/'\n    _cookie_domain = None\n    _cookie_secure = False\n    _cookie_httponly = False\n    _timeout = 1200\n    _reissue_time = 0\n\n    def __init__(self, request):\n        self.request = request\n        dict.__init__(self, {})\n\n    def changed(self):\n        self._dirty = True\n\nclass DummyResponse(object):\n    def __init__(self):\n        self.headerlist = []\n",
            "new_file_content": "import json\nimport unittest\nfrom pyramid import testing\n\nclass SharedCookieSessionTests(object):\n\n    def test_ctor_no_cookie(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        self.assertEqual(dict(session), {})\n\n    def test_instance_conforms(self):\n        from zope.interface.verify import verifyObject\n        from pyramid.interfaces import ISession\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        verifyObject(ISession, session)\n\n    def test_ctor_with_cookie_still_valid(self):\n        import time\n        request = testing.DummyRequest()\n        cookieval = self._serialize((time.time(), 0, {'state': 1}))\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request)\n        self.assertEqual(dict(session), {'state':1})\n\n    def test_ctor_with_cookie_expired(self):\n        request = testing.DummyRequest()\n        cookieval = self._serialize((0, 0, {'state': 1}))\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request)\n        self.assertEqual(dict(session), {})\n\n    def test_ctor_with_bad_cookie_cannot_deserialize(self):\n        request = testing.DummyRequest()\n        request.cookies['session'] = 'abc'\n        session = self._makeOne(request)\n        self.assertEqual(dict(session), {})\n\n    def test_ctor_with_bad_cookie_not_tuple(self):\n        request = testing.DummyRequest()\n        cookieval = self._serialize('abc')\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request)\n        self.assertEqual(dict(session), {})\n\n    def test_timeout(self):\n        import time\n        request = testing.DummyRequest()\n        cookieval = self._serialize((time.time() - 5, 0, {'state': 1}))\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, timeout=1)\n        self.assertEqual(dict(session), {})\n\n    def test_timeout_never(self):\n        import time\n        request = testing.DummyRequest()\n        LONG_TIME = 31536000\n        cookieval = self._serialize((time.time() + LONG_TIME, 0, {'state': 1}))\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, timeout=None)\n        self.assertEqual(dict(session), {'state': 1})\n\n    def test_changed(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        self.assertEqual(session.changed(), None)\n        self.assertTrue(session._dirty)\n\n    def test_invalidate(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        session['a'] = 1\n        self.assertEqual(session.invalidate(), None)\n        self.assertFalse('a' in session)\n\n    def test_reissue_triggered(self):\n        import time\n        request = testing.DummyRequest()\n        cookieval = self._serialize((time.time() - 2, 0, {'state': 1}))\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request)\n        self.assertEqual(session['state'], 1)\n        self.assertTrue(session._dirty)\n\n    def test__set_cookie_on_exception(self):\n        request = testing.DummyRequest()\n        request.exception = True\n        session = self._makeOne(request)\n        session._cookie_on_exception = False\n        response = DummyResponse()\n        self.assertEqual(session._set_cookie(response), False)\n\n    def test__set_cookie_on_exception_no_request_exception(self):\n        import webob\n        request = testing.DummyRequest()\n        request.exception = None\n        session = self._makeOne(request)\n        session._cookie_on_exception = False\n        response = webob.Response()\n        self.assertEqual(session._set_cookie(response), True)\n        self.assertEqual(response.headerlist[-1][0], 'Set-Cookie')\n\n    def test__set_cookie_cookieval_too_long(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        session['abc'] = 'x'*100000\n        response = DummyResponse()\n        self.assertRaises(ValueError, session._set_cookie, response)\n\n    def test__set_cookie_real_webob_response(self):\n        import webob\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        session['abc'] = 'x'\n        response = webob.Response()\n        self.assertEqual(session._set_cookie(response), True)\n        self.assertEqual(response.headerlist[-1][0], 'Set-Cookie')\n\n    def test__set_cookie_options(self):\n        from pyramid.response import Response\n        request = testing.DummyRequest()\n        request.exception = None\n        session = self._makeOne(request,\n                                cookie_name='abc',\n                                path='/foo',\n                                domain='localhost',\n                                secure=True,\n                                httponly=True,\n                                )\n        session['abc'] = 'x'\n        response = Response()\n        self.assertEqual(session._set_cookie(response), True)\n        cookieval = response.headerlist[-1][1]\n        val, domain, path, secure, httponly = [x.strip() for x in\n                                               cookieval.split(';')]\n        self.assertTrue(val.startswith('abc='))\n        self.assertEqual(domain, 'Domain=localhost')\n        self.assertEqual(path, 'Path=/foo')\n        self.assertEqual(secure, 'secure')\n        self.assertEqual(httponly, 'HttpOnly')\n\n    def test_flash_default(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        session.flash('msg1')\n        session.flash('msg2')\n        self.assertEqual(session['_f_'], ['msg1', 'msg2'])\n\n    def test_flash_allow_duplicate_false(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        session.flash('msg1')\n        session.flash('msg1', allow_duplicate=False)\n        self.assertEqual(session['_f_'], ['msg1'])\n\n    def test_flash_allow_duplicate_true_and_msg_not_in_storage(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        session.flash('msg1', allow_duplicate=True)\n        self.assertEqual(session['_f_'], ['msg1'])\n\n    def test_flash_allow_duplicate_false_and_msg_not_in_storage(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        session.flash('msg1', allow_duplicate=False)\n        self.assertEqual(session['_f_'], ['msg1'])\n\n    def test_flash_mixed(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        session.flash('warn1', 'warn')\n        session.flash('warn2', 'warn')\n        session.flash('err1', 'error')\n        session.flash('err2', 'error')\n        self.assertEqual(session['_f_warn'], ['warn1', 'warn2'])\n\n    def test_pop_flash_default_queue(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        queue = ['one', 'two']\n        session['_f_'] = queue\n        result = session.pop_flash()\n        self.assertEqual(result, queue)\n        self.assertEqual(session.get('_f_'), None)\n\n    def test_pop_flash_nodefault_queue(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        queue = ['one', 'two']\n        session['_f_error'] = queue\n        result = session.pop_flash('error')\n        self.assertEqual(result, queue)\n        self.assertEqual(session.get('_f_error'), None)\n\n    def test_peek_flash_default_queue(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        queue = ['one', 'two']\n        session['_f_'] = queue\n        result = session.peek_flash()\n        self.assertEqual(result, queue)\n        self.assertEqual(session.get('_f_'), queue)\n\n    def test_peek_flash_nodefault_queue(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        queue = ['one', 'two']\n        session['_f_error'] = queue\n        result = session.peek_flash('error')\n        self.assertEqual(result, queue)\n        self.assertEqual(session.get('_f_error'), queue)\n\n    def test_new_csrf_token(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        token = session.new_csrf_token()\n        self.assertEqual(token, session['_csrft_'])\n\n    def test_get_csrf_token(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        session['_csrft_'] = 'token'\n        token = session.get_csrf_token()\n        self.assertEqual(token, 'token')\n        self.assertTrue('_csrft_' in session)\n\n    def test_get_csrf_token_new(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        token = session.get_csrf_token()\n        self.assertTrue(token)\n        self.assertTrue('_csrft_' in session)\n\n    def test_no_set_cookie_with_exception(self):\n        import webob\n        request = testing.DummyRequest()\n        request.exception = True\n        session = self._makeOne(request, set_on_exception=False)\n        session['a'] = 1\n        callbacks = request.response_callbacks\n        self.assertEqual(len(callbacks), 1)\n        response = webob.Response()\n        result = callbacks[0](request, response)\n        self.assertEqual(result, None)\n        self.assertFalse('Set-Cookie' in dict(response.headerlist))\n\n    def test_set_cookie_with_exception(self):\n        import webob\n        request = testing.DummyRequest()\n        request.exception = True\n        session = self._makeOne(request)\n        session['a'] = 1\n        callbacks = request.response_callbacks\n        self.assertEqual(len(callbacks), 1)\n        response = webob.Response()\n        result = callbacks[0](request, response)\n        self.assertEqual(result, None)\n        self.assertTrue('Set-Cookie' in dict(response.headerlist))\n\n    def test_cookie_is_set(self):\n        import webob\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        session['a'] = 1\n        callbacks = request.response_callbacks\n        self.assertEqual(len(callbacks), 1)\n        response = webob.Response()\n        result = callbacks[0](request, response)\n        self.assertEqual(result, None)\n        self.assertTrue('Set-Cookie' in dict(response.headerlist))\n\nclass TestBaseCookieSession(SharedCookieSessionTests, unittest.TestCase):\n    def _makeOne(self, request, **kw):\n        from pyramid.session import BaseCookieSessionFactory\n        serializer = DummySerializer()\n        return BaseCookieSessionFactory(serializer, **kw)(request)\n\n    def _serialize(self, value):\n        return json.dumps(value)\n\n    def test_reissue_not_triggered(self):\n        import time\n        request = testing.DummyRequest()\n        cookieval = self._serialize((time.time(), 0, {'state': 1}))\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, reissue_time=1)\n        self.assertEqual(session['state'], 1)\n        self.assertFalse(session._dirty)\n\n    def test_reissue_never(self):\n        request = testing.DummyRequest()\n        cookieval = self._serialize((0, 0, {'state': 1}))\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, reissue_time=None, timeout=None)\n        self.assertEqual(session['state'], 1)\n        self.assertFalse(session._dirty)\n\nclass TestSignedCookieSession(SharedCookieSessionTests, unittest.TestCase):\n    def _makeOne(self, request, **kw):\n        from pyramid.session import SignedCookieSessionFactory\n        kw.setdefault('secret', 'secret')\n        return SignedCookieSessionFactory(**kw)(request)\n\n    def _serialize(self, value, salt=b'pyramid.session.', hashalg='sha512'):\n        import base64\n        import hashlib\n        import hmac\n        import pickle\n\n        digestmod = lambda: hashlib.new(hashalg)\n        cstruct = pickle.dumps(value, pickle.HIGHEST_PROTOCOL)\n        sig = hmac.new(salt + b'secret', cstruct, digestmod).digest()\n        return base64.urlsafe_b64encode(sig + cstruct).rstrip(b'=')\n\n    def test_reissue_not_triggered(self):\n        import time\n        request = testing.DummyRequest()\n        cookieval = self._serialize((time.time(), 0, {'state': 1}))\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, reissue_time=1)\n        self.assertEqual(session['state'], 1)\n        self.assertFalse(session._dirty)\n\n    def test_reissue_never(self):\n        request = testing.DummyRequest()\n        cookieval = self._serialize((0, 0, {'state': 1}))\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, reissue_time=None, timeout=None)\n        self.assertEqual(session['state'], 1)\n        self.assertFalse(session._dirty)\n\n    def test_custom_salt(self):\n        import time\n        request = testing.DummyRequest()\n        cookieval = self._serialize((time.time(), 0, {'state': 1}), salt=b'f.')\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, salt=b'f.')\n        self.assertEqual(session['state'], 1)\n\n    def test_salt_mismatch(self):\n        import time\n        request = testing.DummyRequest()\n        cookieval = self._serialize((time.time(), 0, {'state': 1}), salt=b'f.')\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, salt=b'g.')\n        self.assertEqual(session, {})\n\n    def test_custom_hashalg(self):\n        import time\n        request = testing.DummyRequest()\n        cookieval = self._serialize((time.time(), 0, {'state': 1}),\n                                    hashalg='sha1')\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, hashalg='sha1')\n        self.assertEqual(session['state'], 1)\n\n    def test_hashalg_mismatch(self):\n        import time\n        request = testing.DummyRequest()\n        cookieval = self._serialize((time.time(), 0, {'state': 1}),\n                                    hashalg='sha1')\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, hashalg='sha256')\n        self.assertEqual(session, {})\n\n    def test_secret_mismatch(self):\n        import time\n        request = testing.DummyRequest()\n        cookieval = self._serialize((time.time(), 0, {'state': 1}))\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, secret='evilsecret')\n        self.assertEqual(session, {})\n\n    def test_custom_serializer(self):\n        import base64\n        from hashlib import sha512\n        import hmac\n        import time\n        request = testing.DummyRequest()\n        serializer = DummySerializer()\n        cstruct = serializer.dumps((time.time(), 0, {'state': 1}))\n        sig = hmac.new(b'pyramid.session.secret', cstruct, sha512).digest()\n        cookieval = base64.urlsafe_b64encode(sig + cstruct).rstrip(b'=')\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, serializer=serializer)\n        self.assertEqual(session['state'], 1)\n\n    def test_invalid_data_size(self):\n        from hashlib import sha512\n        import base64\n        request = testing.DummyRequest()\n        num_bytes = sha512().digest_size - 1\n        cookieval = base64.b64encode(b' ' * num_bytes)\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request)\n        self.assertEqual(session, {})\n\n    def test_very_long_key(self):\n        verylongkey = b'a' * 1024\n        import webob\n        request = testing.DummyRequest()\n        session = self._makeOne(request, secret=verylongkey)\n        session['a'] = 1\n        callbacks = request.response_callbacks\n        self.assertEqual(len(callbacks), 1)\n        response = webob.Response()\n\n        try:\n            result = callbacks[0](request, response)\n        except TypeError: # pragma: no cover\n            self.fail('HMAC failed to initialize due to key length.')\n\n        self.assertEqual(result, None)\n        self.assertTrue('Set-Cookie' in dict(response.headerlist))\n\nclass TestUnencryptedCookieSession(SharedCookieSessionTests, unittest.TestCase):\n    def setUp(self):\n        super(TestUnencryptedCookieSession, self).setUp()\n        from zope.deprecation import __show__\n        __show__.off()\n\n    def tearDown(self):\n        super(TestUnencryptedCookieSession, self).tearDown()\n        from zope.deprecation import __show__\n        __show__.on()\n        \n    def _makeOne(self, request, **kw):\n        from pyramid.session import UnencryptedCookieSessionFactoryConfig\n        self._rename_cookie_var(kw, 'path', 'cookie_path')\n        self._rename_cookie_var(kw, 'domain', 'cookie_domain')\n        self._rename_cookie_var(kw, 'secure', 'cookie_secure')\n        self._rename_cookie_var(kw, 'httponly', 'cookie_httponly')\n        self._rename_cookie_var(kw, 'set_on_exception', 'cookie_on_exception')\n        return UnencryptedCookieSessionFactoryConfig('secret', **kw)(request)\n\n    def _rename_cookie_var(self, kw, src, dest):\n        if src in kw:\n            kw.setdefault(dest, kw.pop(src))\n\n    def _serialize(self, value):\n        from pyramid.compat import bytes_\n        from pyramid.session import signed_serialize\n        return bytes_(signed_serialize(value, 'secret'))\n\n    def test_serialize_option(self):\n        from pyramid.response import Response\n        secret = 'secret'\n        request = testing.DummyRequest()\n        session = self._makeOne(request,\n            signed_serialize=dummy_signed_serialize)\n        session['key'] = 'value'\n        response = Response()\n        self.assertEqual(session._set_cookie(response), True)\n        cookie = response.headerlist[-1][1]\n        expected_cookieval = dummy_signed_serialize(\n            (session.accessed, session.created, {'key': 'value'}), secret)\n        response = Response()\n        response.set_cookie('session', expected_cookieval)\n        expected_cookie = response.headerlist[-1][1]\n        self.assertEqual(cookie, expected_cookie)\n\n    def test_deserialize_option(self):\n        import time\n        secret = 'secret'\n        request = testing.DummyRequest()\n        accessed = time.time()\n        state = {'key': 'value'}\n        cookieval = dummy_signed_serialize((accessed, accessed, state), secret)\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request,\n            signed_deserialize=dummy_signed_deserialize)\n        self.assertEqual(dict(session), state)\n\ndef dummy_signed_serialize(data, secret):\n    import base64\n    from pyramid.compat import pickle, bytes_\n    pickled = pickle.dumps(data)\n    return base64.b64encode(bytes_(secret)) + base64.b64encode(pickled)\n\ndef dummy_signed_deserialize(serialized, secret):\n    import base64\n    from pyramid.compat import pickle, bytes_\n    serialized_data = base64.b64decode(\n        serialized[len(base64.b64encode(bytes_(secret))):])\n    return pickle.loads(serialized_data)\n\nclass Test_manage_accessed(unittest.TestCase):\n    def _makeOne(self, wrapped):\n        from pyramid.session import manage_accessed\n        return manage_accessed(wrapped)\n\n    def test_accessed_set(self):\n        request = testing.DummyRequest()\n        session = DummySessionFactory(request)\n        session.renewed = 0\n        wrapper = self._makeOne(session.__class__.get)\n        wrapper(session, 'a')\n        self.assertNotEqual(session.accessed, None)\n        self.assertTrue(session._dirty)\n\n    def test_accessed_without_renew(self):\n        import time\n        request = testing.DummyRequest()\n        session = DummySessionFactory(request)\n        session._reissue_time = 5\n        session.renewed = time.time()\n        wrapper = self._makeOne(session.__class__.get)\n        wrapper(session, 'a')\n        self.assertNotEqual(session.accessed, None)\n        self.assertFalse(session._dirty)\n\n    def test_already_dirty(self):\n        request = testing.DummyRequest()\n        session = DummySessionFactory(request)\n        session.renewed = 0\n        session._dirty = True\n        session['a'] = 1\n        wrapper = self._makeOne(session.__class__.get)\n        self.assertEqual(wrapper.__doc__, session.get.__doc__)\n        result = wrapper(session, 'a')\n        self.assertEqual(result, 1)\n        callbacks = request.response_callbacks\n        self.assertEqual(len(callbacks), 0)\n\nclass Test_manage_changed(unittest.TestCase):\n    def _makeOne(self, wrapped):\n        from pyramid.session import manage_changed\n        return manage_changed(wrapped)\n\n    def test_it(self):\n        request = testing.DummyRequest()\n        session = DummySessionFactory(request)\n        wrapper = self._makeOne(session.__class__.__setitem__)\n        wrapper(session, 'a', 1)\n        self.assertNotEqual(session.accessed, None)\n        self.assertTrue(session._dirty)\n\ndef serialize(data, secret):\n    import hmac\n    import base64\n    from hashlib import sha1\n    from pyramid.compat import bytes_\n    from pyramid.compat import native_\n    from pyramid.compat import pickle\n    pickled = pickle.dumps(data, pickle.HIGHEST_PROTOCOL)\n    sig = hmac.new(bytes_(secret), pickled, sha1).hexdigest()\n    return sig + native_(base64.b64encode(pickled))\n\nclass Test_signed_serialize(unittest.TestCase):\n    def _callFUT(self, data, secret):\n        from pyramid.session import signed_serialize\n        return signed_serialize(data, secret)\n\n    def test_it(self):\n        expected = serialize('123', 'secret')\n        result = self._callFUT('123', 'secret')\n        self.assertEqual(result, expected)\n        \nclass Test_signed_deserialize(unittest.TestCase):\n    def _callFUT(self, serialized, secret, hmac=None):\n        if hmac is None:\n            import hmac\n        from pyramid.session import signed_deserialize\n        return signed_deserialize(serialized, secret, hmac=hmac)\n\n    def test_it(self):\n        serialized = serialize('123', 'secret')\n        result = self._callFUT(serialized, 'secret')\n        self.assertEqual(result, '123')\n\n    def test_invalid_bits(self):\n        serialized = serialize('123', 'secret')\n        self.assertRaises(ValueError, self._callFUT, serialized, 'seekrit')\n\n    def test_invalid_len(self):\n        class hmac(object):\n            def new(self, *arg):\n                return self\n            def hexdigest(self):\n                return '1234'\n        serialized = serialize('123', 'secret123')\n        self.assertRaises(ValueError, self._callFUT, serialized, 'secret',\n                          hmac=hmac())\n        \n    def test_it_bad_encoding(self):\n        serialized = 'bad' + serialize('123', 'secret')\n        self.assertRaises(ValueError, self._callFUT, serialized, 'secret')\n\nclass Test_check_csrf_token(unittest.TestCase):\n    def _callFUT(self, *args, **kwargs):\n        from ..session import check_csrf_token\n        return check_csrf_token(*args, **kwargs)\n\n    def test_success_token(self):\n        request = testing.DummyRequest()\n        request.params['csrf_token'] = request.session.get_csrf_token()\n        self.assertEqual(self._callFUT(request, token='csrf_token'), True)\n\n    def test_success_header(self):\n        request = testing.DummyRequest()\n        request.headers['X-CSRF-Token'] = request.session.get_csrf_token()\n        self.assertEqual(self._callFUT(request, header='X-CSRF-Token'), True)\n\n    def test_success_default_token(self):\n        request = testing.DummyRequest()\n        request.params['csrf_token'] = request.session.get_csrf_token()\n        self.assertEqual(self._callFUT(request), True)\n\n    def test_success_default_header(self):\n        request = testing.DummyRequest()\n        request.headers['X-CSRF-Token'] = request.session.get_csrf_token()\n        self.assertEqual(self._callFUT(request), True)\n\n    def test_failure_raises(self):\n        from pyramid.exceptions import BadCSRFToken\n        request = testing.DummyRequest()\n        self.assertRaises(BadCSRFToken, self._callFUT, request,\n                          'csrf_token')\n\n    def test_failure_no_raises(self):\n        request = testing.DummyRequest()\n        result = self._callFUT(request, 'csrf_token', raises=False)\n        self.assertEqual(result, False)\n\nclass DummySerializer(object):\n    def dumps(self, value):\n        return json.dumps(value).encode('utf-8')\n\n    def loads(self, value):\n        return json.loads(value.decode('utf-8'))\n\nclass DummySessionFactory(dict):\n    _dirty = False\n    _cookie_name = 'session'\n    _cookie_max_age = None\n    _cookie_path = '/'\n    _cookie_domain = None\n    _cookie_secure = False\n    _cookie_httponly = False\n    _timeout = 1200\n    _reissue_time = 0\n\n    def __init__(self, request):\n        self.request = request\n        dict.__init__(self, {})\n\n    def changed(self):\n        self._dirty = True\n\nclass DummyResponse(object):\n    def __init__(self):\n        self.headerlist = []\n",
            "header": {
                "file": {
                    "path": "pyramid/tests/test_session.py"
                },
                "misc_line": null
            },
            "index_line": {
                "old_commit_hash": "1ad0729b3",
                "new_commit_hash": "1aaa7a2ba",
                "mode": "100644"
            },
            "is_binary_file": false,
            "binary_line": null,
            "minus_file": {
                "path": "a/pyramid/tests/test_session.py"
            },
            "plus_file": {
                "path": "b/pyramid/tests/test_session.py"
            },
            "hunks": [
                {
                    "descriptor": {
                        "old_range": {
                            "start": 52,
                            "length": 6
                        },
                        "new_range": {
                            "start": 52,
                            "length": 15
                        },
                        "section": "class SharedCookieSessionTests(object):"
                    },
                    "line_group": {
                        "all_lines": [
                            {
                                "content": "        session = self._makeOne(request, timeout=1)",
                                "type": "context"
                            },
                            {
                                "content": "        self.assertEqual(dict(session), {})",
                                "type": "context"
                            },
                            {
                                "content": "",
                                "type": "context"
                            },
                            {
                                "content": "    def test_timeout_never(self):",
                                "type": "added"
                            },
                            {
                                "content": "        import time",
                                "type": "added"
                            },
                            {
                                "content": "        request = testing.DummyRequest()",
                                "type": "added"
                            },
                            {
                                "content": "        LONG_TIME = 31536000",
                                "type": "added"
                            },
                            {
                                "content": "        cookieval = self._serialize((time.time() + LONG_TIME, 0, {'state': 1}))",
                                "type": "added"
                            },
                            {
                                "content": "        request.cookies['session'] = cookieval",
                                "type": "added"
                            },
                            {
                                "content": "        session = self._makeOne(request, timeout=None)",
                                "type": "added"
                            },
                            {
                                "content": "        self.assertEqual(dict(session), {'state': 1})",
                                "type": "added"
                            },
                            {
                                "content": "",
                                "type": "added"
                            },
                            {
                                "content": "    def test_changed(self):",
                                "type": "context"
                            },
                            {
                                "content": "        request = testing.DummyRequest()",
                                "type": "context"
                            },
                            {
                                "content": "        session = self._makeOne(request)",
                                "type": "context"
                            }
                        ]
                    },
                    "modified_entities": [
                        {
                            "file_name": "pyramid/tests/test_session.py",
                            "type": "class",
                            "name": "SharedCookieSessionTests",
                            "content": "class SharedCookieSessionTests(object):\n\n    def test_ctor_no_cookie(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        self.assertEqual(dict(session), {})\n\n    def test_instance_conforms(self):\n        from zope.interface.verify import verifyObject\n        from pyramid.interfaces import ISession\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        verifyObject(ISession, session)\n\n    def test_ctor_with_cookie_still_valid(self):\n        import time\n        request = testing.DummyRequest()\n        cookieval = self._serialize((time.time(), 0, {'state': 1}))\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request)\n        self.assertEqual(dict(session), {'state':1})\n\n    def test_ctor_with_cookie_expired(self):\n        request = testing.DummyRequest()\n        cookieval = self._serialize((0, 0, {'state': 1}))\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request)\n        self.assertEqual(dict(session), {})\n\n    def test_ctor_with_bad_cookie_cannot_deserialize(self):\n        request = testing.DummyRequest()\n        request.cookies['session'] = 'abc'\n        session = self._makeOne(request)\n        self.assertEqual(dict(session), {})\n\n    def test_ctor_with_bad_cookie_not_tuple(self):\n        request = testing.DummyRequest()\n        cookieval = self._serialize('abc')\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request)\n        self.assertEqual(dict(session), {})\n\n    def test_timeout(self):\n        import time\n        request = testing.DummyRequest()\n        cookieval = self._serialize((time.time() - 5, 0, {'state': 1}))\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, timeout=1)\n        self.assertEqual(dict(session), {})\n\n    def test_timeout_never(self):\n        import time\n        request = testing.DummyRequest()\n        LONG_TIME = 31536000\n        cookieval = self._serialize((time.time() + LONG_TIME, 0, {'state': 1}))\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, timeout=None)\n        self.assertEqual(dict(session), {'state': 1})\n\n    def test_changed(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        self.assertEqual(session.changed(), None)\n        self.assertTrue(session._dirty)\n\n    def test_invalidate(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        session['a'] = 1\n        self.assertEqual(session.invalidate(), None)\n        self.assertFalse('a' in session)\n\n    def test_reissue_triggered(self):\n        import time\n        request = testing.DummyRequest()\n        cookieval = self._serialize((time.time() - 2, 0, {'state': 1}))\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request)\n        self.assertEqual(session['state'], 1)\n        self.assertTrue(session._dirty)\n\n    def test__set_cookie_on_exception(self):\n        request = testing.DummyRequest()\n        request.exception = True\n        session = self._makeOne(request)\n        session._cookie_on_exception = False\n        response = DummyResponse()\n        self.assertEqual(session._set_cookie(response), False)\n\n    def test__set_cookie_on_exception_no_request_exception(self):\n        import webob\n        request = testing.DummyRequest()\n        request.exception = None\n        session = self._makeOne(request)\n        session._cookie_on_exception = False\n        response = webob.Response()\n        self.assertEqual(session._set_cookie(response), True)\n        self.assertEqual(response.headerlist[-1][0], 'Set-Cookie')\n\n    def test__set_cookie_cookieval_too_long(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        session['abc'] = 'x'*100000\n        response = DummyResponse()\n        self.assertRaises(ValueError, session._set_cookie, response)\n\n    def test__set_cookie_real_webob_response(self):\n        import webob\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        session['abc'] = 'x'\n        response = webob.Response()\n        self.assertEqual(session._set_cookie(response), True)\n        self.assertEqual(response.headerlist[-1][0], 'Set-Cookie')\n\n    def test__set_cookie_options(self):\n        from pyramid.response import Response\n        request = testing.DummyRequest()\n        request.exception = None\n        session = self._makeOne(request,\n                                cookie_name='abc',\n                                path='/foo',\n                                domain='localhost',\n                                secure=True,\n                                httponly=True,\n                                )\n        session['abc'] = 'x'\n        response = Response()\n        self.assertEqual(session._set_cookie(response), True)\n        cookieval = response.headerlist[-1][1]\n        val, domain, path, secure, httponly = [x.strip() for x in\n                                               cookieval.split(';')]\n        self.assertTrue(val.startswith('abc='))\n        self.assertEqual(domain, 'Domain=localhost')\n        self.assertEqual(path, 'Path=/foo')\n        self.assertEqual(secure, 'secure')\n        self.assertEqual(httponly, 'HttpOnly')\n\n    def test_flash_default(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        session.flash('msg1')\n        session.flash('msg2')\n        self.assertEqual(session['_f_'], ['msg1', 'msg2'])\n\n    def test_flash_allow_duplicate_false(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        session.flash('msg1')\n        session.flash('msg1', allow_duplicate=False)\n        self.assertEqual(session['_f_'], ['msg1'])\n\n    def test_flash_allow_duplicate_true_and_msg_not_in_storage(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        session.flash('msg1', allow_duplicate=True)\n        self.assertEqual(session['_f_'], ['msg1'])\n\n    def test_flash_allow_duplicate_false_and_msg_not_in_storage(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        session.flash('msg1', allow_duplicate=False)\n        self.assertEqual(session['_f_'], ['msg1'])\n\n    def test_flash_mixed(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        session.flash('warn1', 'warn')\n        session.flash('warn2', 'warn')\n        session.flash('err1', 'error')\n        session.flash('err2', 'error')\n        self.assertEqual(session['_f_warn'], ['warn1', 'warn2'])\n\n    def test_pop_flash_default_queue(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        queue = ['one', 'two']\n        session['_f_'] = queue\n        result = session.pop_flash()\n        self.assertEqual(result, queue)\n        self.assertEqual(session.get('_f_'), None)\n\n    def test_pop_flash_nodefault_queue(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        queue = ['one', 'two']\n        session['_f_error'] = queue\n        result = session.pop_flash('error')\n        self.assertEqual(result, queue)\n        self.assertEqual(session.get('_f_error'), None)\n\n    def test_peek_flash_default_queue(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        queue = ['one', 'two']\n        session['_f_'] = queue\n        result = session.peek_flash()\n        self.assertEqual(result, queue)\n        self.assertEqual(session.get('_f_'), queue)\n\n    def test_peek_flash_nodefault_queue(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        queue = ['one', 'two']\n        session['_f_error'] = queue\n        result = session.peek_flash('error')\n        self.assertEqual(result, queue)\n        self.assertEqual(session.get('_f_error'), queue)\n\n    def test_new_csrf_token(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        token = session.new_csrf_token()\n        self.assertEqual(token, session['_csrft_'])\n\n    def test_get_csrf_token(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        session['_csrft_'] = 'token'\n        token = session.get_csrf_token()\n        self.assertEqual(token, 'token')\n        self.assertTrue('_csrft_' in session)\n\n    def test_get_csrf_token_new(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        token = session.get_csrf_token()\n        self.assertTrue(token)\n        self.assertTrue('_csrft_' in session)\n\n    def test_no_set_cookie_with_exception(self):\n        import webob\n        request = testing.DummyRequest()\n        request.exception = True\n        session = self._makeOne(request, set_on_exception=False)\n        session['a'] = 1\n        callbacks = request.response_callbacks\n        self.assertEqual(len(callbacks), 1)\n        response = webob.Response()\n        result = callbacks[0](request, response)\n        self.assertEqual(result, None)\n        self.assertFalse('Set-Cookie' in dict(response.headerlist))\n\n    def test_set_cookie_with_exception(self):\n        import webob\n        request = testing.DummyRequest()\n        request.exception = True\n        session = self._makeOne(request)\n        session['a'] = 1\n        callbacks = request.response_callbacks\n        self.assertEqual(len(callbacks), 1)\n        response = webob.Response()\n        result = callbacks[0](request, response)\n        self.assertEqual(result, None)\n        self.assertTrue('Set-Cookie' in dict(response.headerlist))\n\n    def test_cookie_is_set(self):\n        import webob\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        session['a'] = 1\n        callbacks = request.response_callbacks\n        self.assertEqual(len(callbacks), 1)\n        response = webob.Response()\n        result = callbacks[0](request, response)\n        self.assertEqual(result, None)\n        self.assertTrue('Set-Cookie' in dict(response.headerlist))",
                            "ast_type_str": "ClassDef",
                            "start_lineno": 5,
                            "end_lineno": 271,
                            "parent": null
                        }
                    ],
                    "added_entities": [
                        {
                            "file_name": "pyramid/tests/test_session.py",
                            "type": "method",
                            "name": "SharedCookieSessionTests.test_timeout_never",
                            "content": "class SharedCookieSessionTests(object):\n\n    def test_ctor_no_cookie(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        self.assertEqual(dict(session), {})\n\n    def test_instance_conforms(self):\n        from zope.interface.verify import verifyObject\n        from pyramid.interfaces import ISession\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        verifyObject(ISession, session)\n\n    def test_ctor_with_cookie_still_valid(self):\n        import time\n        request = testing.DummyRequest()\n        cookieval = self._serialize((time.time(), 0, {'state': 1}))\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request)\n        self.assertEqual(dict(session), {'state':1})\n\n    def test_ctor_with_cookie_expired(self):\n        request = testing.DummyRequest()\n        cookieval = self._serialize((0, 0, {'state': 1}))\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request)\n        self.assertEqual(dict(session), {})\n\n    def test_ctor_with_bad_cookie_cannot_deserialize(self):\n        request = testing.DummyRequest()\n        request.cookies['session'] = 'abc'\n        session = self._makeOne(request)\n        self.assertEqual(dict(session), {})\n\n    def test_ctor_with_bad_cookie_not_tuple(self):\n        request = testing.DummyRequest()\n        cookieval = self._serialize('abc')\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request)\n        self.assertEqual(dict(session), {})\n\n    def test_timeout(self):\n        import time\n        request = testing.DummyRequest()\n        cookieval = self._serialize((time.time() - 5, 0, {'state': 1}))\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, timeout=1)\n        self.assertEqual(dict(session), {})\n\n    def test_timeout_never(self):\n        import time\n        request = testing.DummyRequest()\n        LONG_TIME = 31536000\n        cookieval = self._serialize((time.time() + LONG_TIME, 0, {'state': 1}))\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, timeout=None)\n        self.assertEqual(dict(session), {'state': 1})\n\n    def test_changed(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        self.assertEqual(session.changed(), None)\n        self.assertTrue(session._dirty)\n\n    def test_invalidate(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        session['a'] = 1\n        self.assertEqual(session.invalidate(), None)\n        self.assertFalse('a' in session)\n\n    def test_reissue_triggered(self):\n        import time\n        request = testing.DummyRequest()\n        cookieval = self._serialize((time.time() - 2, 0, {'state': 1}))\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request)\n        self.assertEqual(session['state'], 1)\n        self.assertTrue(session._dirty)\n\n    def test__set_cookie_on_exception(self):\n        request = testing.DummyRequest()\n        request.exception = True\n        session = self._makeOne(request)\n        session._cookie_on_exception = False\n        response = DummyResponse()\n        self.assertEqual(session._set_cookie(response), False)\n\n    def test__set_cookie_on_exception_no_request_exception(self):\n        import webob\n        request = testing.DummyRequest()\n        request.exception = None\n        session = self._makeOne(request)\n        session._cookie_on_exception = False\n        response = webob.Response()\n        self.assertEqual(session._set_cookie(response), True)\n        self.assertEqual(response.headerlist[-1][0], 'Set-Cookie')\n\n    def test__set_cookie_cookieval_too_long(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        session['abc'] = 'x'*100000\n        response = DummyResponse()\n        self.assertRaises(ValueError, session._set_cookie, response)\n\n    def test__set_cookie_real_webob_response(self):\n        import webob\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        session['abc'] = 'x'\n        response = webob.Response()\n        self.assertEqual(session._set_cookie(response), True)\n        self.assertEqual(response.headerlist[-1][0], 'Set-Cookie')\n\n    def test__set_cookie_options(self):\n        from pyramid.response import Response\n        request = testing.DummyRequest()\n        request.exception = None\n        session = self._makeOne(request,\n                                cookie_name='abc',\n                                path='/foo',\n                                domain='localhost',\n                                secure=True,\n                                httponly=True,\n                                )\n        session['abc'] = 'x'\n        response = Response()\n        self.assertEqual(session._set_cookie(response), True)\n        cookieval = response.headerlist[-1][1]\n        val, domain, path, secure, httponly = [x.strip() for x in\n                                               cookieval.split(';')]\n        self.assertTrue(val.startswith('abc='))\n        self.assertEqual(domain, 'Domain=localhost')\n        self.assertEqual(path, 'Path=/foo')\n        self.assertEqual(secure, 'secure')\n        self.assertEqual(httponly, 'HttpOnly')\n\n    def test_flash_default(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        session.flash('msg1')\n        session.flash('msg2')\n        self.assertEqual(session['_f_'], ['msg1', 'msg2'])\n\n    def test_flash_allow_duplicate_false(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        session.flash('msg1')\n        session.flash('msg1', allow_duplicate=False)\n        self.assertEqual(session['_f_'], ['msg1'])\n\n    def test_flash_allow_duplicate_true_and_msg_not_in_storage(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        session.flash('msg1', allow_duplicate=True)\n        self.assertEqual(session['_f_'], ['msg1'])\n\n    def test_flash_allow_duplicate_false_and_msg_not_in_storage(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        session.flash('msg1', allow_duplicate=False)\n        self.assertEqual(session['_f_'], ['msg1'])\n\n    def test_flash_mixed(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        session.flash('warn1', 'warn')\n        session.flash('warn2', 'warn')\n        session.flash('err1', 'error')\n        session.flash('err2', 'error')\n        self.assertEqual(session['_f_warn'], ['warn1', 'warn2'])\n\n    def test_pop_flash_default_queue(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        queue = ['one', 'two']\n        session['_f_'] = queue\n        result = session.pop_flash()\n        self.assertEqual(result, queue)\n        self.assertEqual(session.get('_f_'), None)\n\n    def test_pop_flash_nodefault_queue(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        queue = ['one', 'two']\n        session['_f_error'] = queue\n        result = session.pop_flash('error')\n        self.assertEqual(result, queue)\n        self.assertEqual(session.get('_f_error'), None)\n\n    def test_peek_flash_default_queue(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        queue = ['one', 'two']\n        session['_f_'] = queue\n        result = session.peek_flash()\n        self.assertEqual(result, queue)\n        self.assertEqual(session.get('_f_'), queue)\n\n    def test_peek_flash_nodefault_queue(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        queue = ['one', 'two']\n        session['_f_error'] = queue\n        result = session.peek_flash('error')\n        self.assertEqual(result, queue)\n        self.assertEqual(session.get('_f_error'), queue)\n\n    def test_new_csrf_token(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        token = session.new_csrf_token()\n        self.assertEqual(token, session['_csrft_'])\n\n    def test_get_csrf_token(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        session['_csrft_'] = 'token'\n        token = session.get_csrf_token()\n        self.assertEqual(token, 'token')\n        self.assertTrue('_csrft_' in session)\n\n    def test_get_csrf_token_new(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        token = session.get_csrf_token()\n        self.assertTrue(token)\n        self.assertTrue('_csrft_' in session)\n\n    def test_no_set_cookie_with_exception(self):\n        import webob\n        request = testing.DummyRequest()\n        request.exception = True\n        session = self._makeOne(request, set_on_exception=False)\n        session['a'] = 1\n        callbacks = request.response_callbacks\n        self.assertEqual(len(callbacks), 1)\n        response = webob.Response()\n        result = callbacks[0](request, response)\n        self.assertEqual(result, None)\n        self.assertFalse('Set-Cookie' in dict(response.headerlist))\n\n    def test_set_cookie_with_exception(self):\n        import webob\n        request = testing.DummyRequest()\n        request.exception = True\n        session = self._makeOne(request)\n        session['a'] = 1\n        callbacks = request.response_callbacks\n        self.assertEqual(len(callbacks), 1)\n        response = webob.Response()\n        result = callbacks[0](request, response)\n        self.assertEqual(result, None)\n        self.assertTrue('Set-Cookie' in dict(response.headerlist))\n\n    def test_cookie_is_set(self):\n        import webob\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        session['a'] = 1\n        callbacks = request.response_callbacks\n        self.assertEqual(len(callbacks), 1)\n        response = webob.Response()\n        result = callbacks[0](request, response)\n        self.assertEqual(result, None)\n        self.assertTrue('Set-Cookie' in dict(response.headerlist))",
                            "ast_type_str": "ClassDef",
                            "start_lineno": 55,
                            "end_lineno": 62,
                            "parent": {
                                "file_name": "pyramid/tests/test_session.py",
                                "type": "class",
                                "name": "SharedCookieSessionTests",
                                "content": "class SharedCookieSessionTests(object):\n\n    def test_ctor_no_cookie(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        self.assertEqual(dict(session), {})\n\n    def test_instance_conforms(self):\n        from zope.interface.verify import verifyObject\n        from pyramid.interfaces import ISession\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        verifyObject(ISession, session)\n\n    def test_ctor_with_cookie_still_valid(self):\n        import time\n        request = testing.DummyRequest()\n        cookieval = self._serialize((time.time(), 0, {'state': 1}))\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request)\n        self.assertEqual(dict(session), {'state':1})\n\n    def test_ctor_with_cookie_expired(self):\n        request = testing.DummyRequest()\n        cookieval = self._serialize((0, 0, {'state': 1}))\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request)\n        self.assertEqual(dict(session), {})\n\n    def test_ctor_with_bad_cookie_cannot_deserialize(self):\n        request = testing.DummyRequest()\n        request.cookies['session'] = 'abc'\n        session = self._makeOne(request)\n        self.assertEqual(dict(session), {})\n\n    def test_ctor_with_bad_cookie_not_tuple(self):\n        request = testing.DummyRequest()\n        cookieval = self._serialize('abc')\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request)\n        self.assertEqual(dict(session), {})\n\n    def test_timeout(self):\n        import time\n        request = testing.DummyRequest()\n        cookieval = self._serialize((time.time() - 5, 0, {'state': 1}))\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, timeout=1)\n        self.assertEqual(dict(session), {})\n\n    def test_timeout_never(self):\n        import time\n        request = testing.DummyRequest()\n        LONG_TIME = 31536000\n        cookieval = self._serialize((time.time() + LONG_TIME, 0, {'state': 1}))\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, timeout=None)\n        self.assertEqual(dict(session), {'state': 1})\n\n    def test_changed(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        self.assertEqual(session.changed(), None)\n        self.assertTrue(session._dirty)\n\n    def test_invalidate(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        session['a'] = 1\n        self.assertEqual(session.invalidate(), None)\n        self.assertFalse('a' in session)\n\n    def test_reissue_triggered(self):\n        import time\n        request = testing.DummyRequest()\n        cookieval = self._serialize((time.time() - 2, 0, {'state': 1}))\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request)\n        self.assertEqual(session['state'], 1)\n        self.assertTrue(session._dirty)\n\n    def test__set_cookie_on_exception(self):\n        request = testing.DummyRequest()\n        request.exception = True\n        session = self._makeOne(request)\n        session._cookie_on_exception = False\n        response = DummyResponse()\n        self.assertEqual(session._set_cookie(response), False)\n\n    def test__set_cookie_on_exception_no_request_exception(self):\n        import webob\n        request = testing.DummyRequest()\n        request.exception = None\n        session = self._makeOne(request)\n        session._cookie_on_exception = False\n        response = webob.Response()\n        self.assertEqual(session._set_cookie(response), True)\n        self.assertEqual(response.headerlist[-1][0], 'Set-Cookie')\n\n    def test__set_cookie_cookieval_too_long(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        session['abc'] = 'x'*100000\n        response = DummyResponse()\n        self.assertRaises(ValueError, session._set_cookie, response)\n\n    def test__set_cookie_real_webob_response(self):\n        import webob\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        session['abc'] = 'x'\n        response = webob.Response()\n        self.assertEqual(session._set_cookie(response), True)\n        self.assertEqual(response.headerlist[-1][0], 'Set-Cookie')\n\n    def test__set_cookie_options(self):\n        from pyramid.response import Response\n        request = testing.DummyRequest()\n        request.exception = None\n        session = self._makeOne(request,\n                                cookie_name='abc',\n                                path='/foo',\n                                domain='localhost',\n                                secure=True,\n                                httponly=True,\n                                )\n        session['abc'] = 'x'\n        response = Response()\n        self.assertEqual(session._set_cookie(response), True)\n        cookieval = response.headerlist[-1][1]\n        val, domain, path, secure, httponly = [x.strip() for x in\n                                               cookieval.split(';')]\n        self.assertTrue(val.startswith('abc='))\n        self.assertEqual(domain, 'Domain=localhost')\n        self.assertEqual(path, 'Path=/foo')\n        self.assertEqual(secure, 'secure')\n        self.assertEqual(httponly, 'HttpOnly')\n\n    def test_flash_default(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        session.flash('msg1')\n        session.flash('msg2')\n        self.assertEqual(session['_f_'], ['msg1', 'msg2'])\n\n    def test_flash_allow_duplicate_false(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        session.flash('msg1')\n        session.flash('msg1', allow_duplicate=False)\n        self.assertEqual(session['_f_'], ['msg1'])\n\n    def test_flash_allow_duplicate_true_and_msg_not_in_storage(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        session.flash('msg1', allow_duplicate=True)\n        self.assertEqual(session['_f_'], ['msg1'])\n\n    def test_flash_allow_duplicate_false_and_msg_not_in_storage(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        session.flash('msg1', allow_duplicate=False)\n        self.assertEqual(session['_f_'], ['msg1'])\n\n    def test_flash_mixed(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        session.flash('warn1', 'warn')\n        session.flash('warn2', 'warn')\n        session.flash('err1', 'error')\n        session.flash('err2', 'error')\n        self.assertEqual(session['_f_warn'], ['warn1', 'warn2'])\n\n    def test_pop_flash_default_queue(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        queue = ['one', 'two']\n        session['_f_'] = queue\n        result = session.pop_flash()\n        self.assertEqual(result, queue)\n        self.assertEqual(session.get('_f_'), None)\n\n    def test_pop_flash_nodefault_queue(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        queue = ['one', 'two']\n        session['_f_error'] = queue\n        result = session.pop_flash('error')\n        self.assertEqual(result, queue)\n        self.assertEqual(session.get('_f_error'), None)\n\n    def test_peek_flash_default_queue(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        queue = ['one', 'two']\n        session['_f_'] = queue\n        result = session.peek_flash()\n        self.assertEqual(result, queue)\n        self.assertEqual(session.get('_f_'), queue)\n\n    def test_peek_flash_nodefault_queue(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        queue = ['one', 'two']\n        session['_f_error'] = queue\n        result = session.peek_flash('error')\n        self.assertEqual(result, queue)\n        self.assertEqual(session.get('_f_error'), queue)\n\n    def test_new_csrf_token(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        token = session.new_csrf_token()\n        self.assertEqual(token, session['_csrft_'])\n\n    def test_get_csrf_token(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        session['_csrft_'] = 'token'\n        token = session.get_csrf_token()\n        self.assertEqual(token, 'token')\n        self.assertTrue('_csrft_' in session)\n\n    def test_get_csrf_token_new(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        token = session.get_csrf_token()\n        self.assertTrue(token)\n        self.assertTrue('_csrft_' in session)\n\n    def test_no_set_cookie_with_exception(self):\n        import webob\n        request = testing.DummyRequest()\n        request.exception = True\n        session = self._makeOne(request, set_on_exception=False)\n        session['a'] = 1\n        callbacks = request.response_callbacks\n        self.assertEqual(len(callbacks), 1)\n        response = webob.Response()\n        result = callbacks[0](request, response)\n        self.assertEqual(result, None)\n        self.assertFalse('Set-Cookie' in dict(response.headerlist))\n\n    def test_set_cookie_with_exception(self):\n        import webob\n        request = testing.DummyRequest()\n        request.exception = True\n        session = self._makeOne(request)\n        session['a'] = 1\n        callbacks = request.response_callbacks\n        self.assertEqual(len(callbacks), 1)\n        response = webob.Response()\n        result = callbacks[0](request, response)\n        self.assertEqual(result, None)\n        self.assertTrue('Set-Cookie' in dict(response.headerlist))\n\n    def test_cookie_is_set(self):\n        import webob\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        session['a'] = 1\n        callbacks = request.response_callbacks\n        self.assertEqual(len(callbacks), 1)\n        response = webob.Response()\n        result = callbacks[0](request, response)\n        self.assertEqual(result, None)\n        self.assertTrue('Set-Cookie' in dict(response.headerlist))",
                                "ast_type_str": "ClassDef",
                                "start_lineno": 5,
                                "end_lineno": 271,
                                "parent": null
                            }
                        }
                    ],
                    "deleted_entities": []
                },
                {
                    "descriptor": {
                        "old_range": {
                            "start": 279,
                            "length": 6
                        },
                        "new_range": {
                            "start": 288,
                            "length": 14
                        },
                        "section": "class TestBaseCookieSession(SharedCookieSessionTests, unittest.TestCase):"
                    },
                    "line_group": {
                        "all_lines": [
                            {
                                "content": "        self.assertEqual(session['state'], 1)",
                                "type": "context"
                            },
                            {
                                "content": "        self.assertFalse(session._dirty)",
                                "type": "context"
                            },
                            {
                                "content": "",
                                "type": "context"
                            },
                            {
                                "content": "    def test_reissue_never(self):",
                                "type": "added"
                            },
                            {
                                "content": "        request = testing.DummyRequest()",
                                "type": "added"
                            },
                            {
                                "content": "        cookieval = self._serialize((0, 0, {'state': 1}))",
                                "type": "added"
                            },
                            {
                                "content": "        request.cookies['session'] = cookieval",
                                "type": "added"
                            },
                            {
                                "content": "        session = self._makeOne(request, reissue_time=None, timeout=None)",
                                "type": "added"
                            },
                            {
                                "content": "        self.assertEqual(session['state'], 1)",
                                "type": "added"
                            },
                            {
                                "content": "        self.assertFalse(session._dirty)",
                                "type": "added"
                            },
                            {
                                "content": "",
                                "type": "added"
                            },
                            {
                                "content": "class TestSignedCookieSession(SharedCookieSessionTests, unittest.TestCase):",
                                "type": "context"
                            },
                            {
                                "content": "    def _makeOne(self, request, **kw):",
                                "type": "context"
                            },
                            {
                                "content": "        from pyramid.session import SignedCookieSessionFactory",
                                "type": "context"
                            }
                        ]
                    },
                    "modified_entities": [
                        {
                            "file_name": "pyramid/tests/test_session.py",
                            "type": "class",
                            "name": "TestBaseCookieSession",
                            "content": "class TestBaseCookieSession(SharedCookieSessionTests, unittest.TestCase):\n    def _makeOne(self, request, **kw):\n        from pyramid.session import BaseCookieSessionFactory\n        serializer = DummySerializer()\n        return BaseCookieSessionFactory(serializer, **kw)(request)\n\n    def _serialize(self, value):\n        return json.dumps(value)\n\n    def test_reissue_not_triggered(self):\n        import time\n        request = testing.DummyRequest()\n        cookieval = self._serialize((time.time(), 0, {'state': 1}))\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, reissue_time=1)\n        self.assertEqual(session['state'], 1)\n        self.assertFalse(session._dirty)\n\n    def test_reissue_never(self):\n        request = testing.DummyRequest()\n        cookieval = self._serialize((0, 0, {'state': 1}))\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, reissue_time=None, timeout=None)\n        self.assertEqual(session['state'], 1)\n        self.assertFalse(session._dirty)",
                            "ast_type_str": "ClassDef",
                            "start_lineno": 273,
                            "end_lineno": 297,
                            "parent": null
                        }
                    ],
                    "added_entities": [
                        {
                            "file_name": "pyramid/tests/test_session.py",
                            "type": "method",
                            "name": "TestBaseCookieSession.test_reissue_never",
                            "content": "class TestBaseCookieSession(SharedCookieSessionTests, unittest.TestCase):\n    def _makeOne(self, request, **kw):\n        from pyramid.session import BaseCookieSessionFactory\n        serializer = DummySerializer()\n        return BaseCookieSessionFactory(serializer, **kw)(request)\n\n    def _serialize(self, value):\n        return json.dumps(value)\n\n    def test_reissue_not_triggered(self):\n        import time\n        request = testing.DummyRequest()\n        cookieval = self._serialize((time.time(), 0, {'state': 1}))\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, reissue_time=1)\n        self.assertEqual(session['state'], 1)\n        self.assertFalse(session._dirty)\n\n    def test_reissue_never(self):\n        request = testing.DummyRequest()\n        cookieval = self._serialize((0, 0, {'state': 1}))\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, reissue_time=None, timeout=None)\n        self.assertEqual(session['state'], 1)\n        self.assertFalse(session._dirty)",
                            "ast_type_str": "ClassDef",
                            "start_lineno": 291,
                            "end_lineno": 297,
                            "parent": {
                                "file_name": "pyramid/tests/test_session.py",
                                "type": "class",
                                "name": "TestBaseCookieSession",
                                "content": "class TestBaseCookieSession(SharedCookieSessionTests, unittest.TestCase):\n    def _makeOne(self, request, **kw):\n        from pyramid.session import BaseCookieSessionFactory\n        serializer = DummySerializer()\n        return BaseCookieSessionFactory(serializer, **kw)(request)\n\n    def _serialize(self, value):\n        return json.dumps(value)\n\n    def test_reissue_not_triggered(self):\n        import time\n        request = testing.DummyRequest()\n        cookieval = self._serialize((time.time(), 0, {'state': 1}))\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, reissue_time=1)\n        self.assertEqual(session['state'], 1)\n        self.assertFalse(session._dirty)\n\n    def test_reissue_never(self):\n        request = testing.DummyRequest()\n        cookieval = self._serialize((0, 0, {'state': 1}))\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, reissue_time=None, timeout=None)\n        self.assertEqual(session['state'], 1)\n        self.assertFalse(session._dirty)",
                                "ast_type_str": "ClassDef",
                                "start_lineno": 273,
                                "end_lineno": 297,
                                "parent": null
                            }
                        }
                    ],
                    "deleted_entities": []
                },
                {
                    "descriptor": {
                        "old_range": {
                            "start": 305,
                            "length": 6
                        },
                        "new_range": {
                            "start": 322,
                            "length": 14
                        },
                        "section": "class TestSignedCookieSession(SharedCookieSessionTests, unittest.TestCase):"
                    },
                    "line_group": {
                        "all_lines": [
                            {
                                "content": "        self.assertEqual(session['state'], 1)",
                                "type": "context"
                            },
                            {
                                "content": "        self.assertFalse(session._dirty)",
                                "type": "context"
                            },
                            {
                                "content": "",
                                "type": "context"
                            },
                            {
                                "content": "    def test_reissue_never(self):",
                                "type": "added"
                            },
                            {
                                "content": "        request = testing.DummyRequest()",
                                "type": "added"
                            },
                            {
                                "content": "        cookieval = self._serialize((0, 0, {'state': 1}))",
                                "type": "added"
                            },
                            {
                                "content": "        request.cookies['session'] = cookieval",
                                "type": "added"
                            },
                            {
                                "content": "        session = self._makeOne(request, reissue_time=None, timeout=None)",
                                "type": "added"
                            },
                            {
                                "content": "        self.assertEqual(session['state'], 1)",
                                "type": "added"
                            },
                            {
                                "content": "        self.assertFalse(session._dirty)",
                                "type": "added"
                            },
                            {
                                "content": "",
                                "type": "added"
                            },
                            {
                                "content": "    def test_custom_salt(self):",
                                "type": "context"
                            },
                            {
                                "content": "        import time",
                                "type": "context"
                            },
                            {
                                "content": "        request = testing.DummyRequest()",
                                "type": "context"
                            },
                            {
                                "content": "",
                                "type": "context"
                            }
                        ]
                    },
                    "modified_entities": [
                        {
                            "file_name": "pyramid/tests/test_session.py",
                            "type": "class",
                            "name": "TestSignedCookieSession",
                            "content": "class TestSignedCookieSession(SharedCookieSessionTests, unittest.TestCase):\n    def _makeOne(self, request, **kw):\n        from pyramid.session import SignedCookieSessionFactory\n        kw.setdefault('secret', 'secret')\n        return SignedCookieSessionFactory(**kw)(request)\n\n    def _serialize(self, value, salt=b'pyramid.session.', hashalg='sha512'):\n        import base64\n        import hashlib\n        import hmac\n        import pickle\n\n        digestmod = lambda: hashlib.new(hashalg)\n        cstruct = pickle.dumps(value, pickle.HIGHEST_PROTOCOL)\n        sig = hmac.new(salt + b'secret', cstruct, digestmod).digest()\n        return base64.urlsafe_b64encode(sig + cstruct).rstrip(b'=')\n\n    def test_reissue_not_triggered(self):\n        import time\n        request = testing.DummyRequest()\n        cookieval = self._serialize((time.time(), 0, {'state': 1}))\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, reissue_time=1)\n        self.assertEqual(session['state'], 1)\n        self.assertFalse(session._dirty)\n\n    def test_reissue_never(self):\n        request = testing.DummyRequest()\n        cookieval = self._serialize((0, 0, {'state': 1}))\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, reissue_time=None, timeout=None)\n        self.assertEqual(session['state'], 1)\n        self.assertFalse(session._dirty)\n\n    def test_custom_salt(self):\n        import time\n        request = testing.DummyRequest()\n        cookieval = self._serialize((time.time(), 0, {'state': 1}), salt=b'f.')\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, salt=b'f.')\n        self.assertEqual(session['state'], 1)\n\n    def test_salt_mismatch(self):\n        import time\n        request = testing.DummyRequest()\n        cookieval = self._serialize((time.time(), 0, {'state': 1}), salt=b'f.')\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, salt=b'g.')\n        self.assertEqual(session, {})\n\n    def test_custom_hashalg(self):\n        import time\n        request = testing.DummyRequest()\n        cookieval = self._serialize((time.time(), 0, {'state': 1}),\n                                    hashalg='sha1')\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, hashalg='sha1')\n        self.assertEqual(session['state'], 1)\n\n    def test_hashalg_mismatch(self):\n        import time\n        request = testing.DummyRequest()\n        cookieval = self._serialize((time.time(), 0, {'state': 1}),\n                                    hashalg='sha1')\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, hashalg='sha256')\n        self.assertEqual(session, {})\n\n    def test_secret_mismatch(self):\n        import time\n        request = testing.DummyRequest()\n        cookieval = self._serialize((time.time(), 0, {'state': 1}))\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, secret='evilsecret')\n        self.assertEqual(session, {})\n\n    def test_custom_serializer(self):\n        import base64\n        from hashlib import sha512\n        import hmac\n        import time\n        request = testing.DummyRequest()\n        serializer = DummySerializer()\n        cstruct = serializer.dumps((time.time(), 0, {'state': 1}))\n        sig = hmac.new(b'pyramid.session.secret', cstruct, sha512).digest()\n        cookieval = base64.urlsafe_b64encode(sig + cstruct).rstrip(b'=')\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, serializer=serializer)\n        self.assertEqual(session['state'], 1)\n\n    def test_invalid_data_size(self):\n        from hashlib import sha512\n        import base64\n        request = testing.DummyRequest()\n        num_bytes = sha512().digest_size - 1\n        cookieval = base64.b64encode(b' ' * num_bytes)\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request)\n        self.assertEqual(session, {})\n\n    def test_very_long_key(self):\n        verylongkey = b'a' * 1024\n        import webob\n        request = testing.DummyRequest()\n        session = self._makeOne(request, secret=verylongkey)\n        session['a'] = 1\n        callbacks = request.response_callbacks\n        self.assertEqual(len(callbacks), 1)\n        response = webob.Response()\n\n        try:\n            result = callbacks[0](request, response)\n        except TypeError: # pragma: no cover\n            self.fail('HMAC failed to initialize due to key length.')\n\n        self.assertEqual(result, None)\n        self.assertTrue('Set-Cookie' in dict(response.headerlist))",
                            "ast_type_str": "ClassDef",
                            "start_lineno": 299,
                            "end_lineno": 415,
                            "parent": null
                        }
                    ],
                    "added_entities": [
                        {
                            "file_name": "pyramid/tests/test_session.py",
                            "type": "method",
                            "name": "TestSignedCookieSession.test_reissue_never",
                            "content": "class TestSignedCookieSession(SharedCookieSessionTests, unittest.TestCase):\n    def _makeOne(self, request, **kw):\n        from pyramid.session import SignedCookieSessionFactory\n        kw.setdefault('secret', 'secret')\n        return SignedCookieSessionFactory(**kw)(request)\n\n    def _serialize(self, value, salt=b'pyramid.session.', hashalg='sha512'):\n        import base64\n        import hashlib\n        import hmac\n        import pickle\n\n        digestmod = lambda: hashlib.new(hashalg)\n        cstruct = pickle.dumps(value, pickle.HIGHEST_PROTOCOL)\n        sig = hmac.new(salt + b'secret', cstruct, digestmod).digest()\n        return base64.urlsafe_b64encode(sig + cstruct).rstrip(b'=')\n\n    def test_reissue_not_triggered(self):\n        import time\n        request = testing.DummyRequest()\n        cookieval = self._serialize((time.time(), 0, {'state': 1}))\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, reissue_time=1)\n        self.assertEqual(session['state'], 1)\n        self.assertFalse(session._dirty)\n\n    def test_reissue_never(self):\n        request = testing.DummyRequest()\n        cookieval = self._serialize((0, 0, {'state': 1}))\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, reissue_time=None, timeout=None)\n        self.assertEqual(session['state'], 1)\n        self.assertFalse(session._dirty)\n\n    def test_custom_salt(self):\n        import time\n        request = testing.DummyRequest()\n        cookieval = self._serialize((time.time(), 0, {'state': 1}), salt=b'f.')\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, salt=b'f.')\n        self.assertEqual(session['state'], 1)\n\n    def test_salt_mismatch(self):\n        import time\n        request = testing.DummyRequest()\n        cookieval = self._serialize((time.time(), 0, {'state': 1}), salt=b'f.')\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, salt=b'g.')\n        self.assertEqual(session, {})\n\n    def test_custom_hashalg(self):\n        import time\n        request = testing.DummyRequest()\n        cookieval = self._serialize((time.time(), 0, {'state': 1}),\n                                    hashalg='sha1')\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, hashalg='sha1')\n        self.assertEqual(session['state'], 1)\n\n    def test_hashalg_mismatch(self):\n        import time\n        request = testing.DummyRequest()\n        cookieval = self._serialize((time.time(), 0, {'state': 1}),\n                                    hashalg='sha1')\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, hashalg='sha256')\n        self.assertEqual(session, {})\n\n    def test_secret_mismatch(self):\n        import time\n        request = testing.DummyRequest()\n        cookieval = self._serialize((time.time(), 0, {'state': 1}))\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, secret='evilsecret')\n        self.assertEqual(session, {})\n\n    def test_custom_serializer(self):\n        import base64\n        from hashlib import sha512\n        import hmac\n        import time\n        request = testing.DummyRequest()\n        serializer = DummySerializer()\n        cstruct = serializer.dumps((time.time(), 0, {'state': 1}))\n        sig = hmac.new(b'pyramid.session.secret', cstruct, sha512).digest()\n        cookieval = base64.urlsafe_b64encode(sig + cstruct).rstrip(b'=')\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, serializer=serializer)\n        self.assertEqual(session['state'], 1)\n\n    def test_invalid_data_size(self):\n        from hashlib import sha512\n        import base64\n        request = testing.DummyRequest()\n        num_bytes = sha512().digest_size - 1\n        cookieval = base64.b64encode(b' ' * num_bytes)\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request)\n        self.assertEqual(session, {})\n\n    def test_very_long_key(self):\n        verylongkey = b'a' * 1024\n        import webob\n        request = testing.DummyRequest()\n        session = self._makeOne(request, secret=verylongkey)\n        session['a'] = 1\n        callbacks = request.response_callbacks\n        self.assertEqual(len(callbacks), 1)\n        response = webob.Response()\n\n        try:\n            result = callbacks[0](request, response)\n        except TypeError: # pragma: no cover\n            self.fail('HMAC failed to initialize due to key length.')\n\n        self.assertEqual(result, None)\n        self.assertTrue('Set-Cookie' in dict(response.headerlist))",
                            "ast_type_str": "ClassDef",
                            "start_lineno": 325,
                            "end_lineno": 331,
                            "parent": {
                                "file_name": "pyramid/tests/test_session.py",
                                "type": "class",
                                "name": "TestSignedCookieSession",
                                "content": "class TestSignedCookieSession(SharedCookieSessionTests, unittest.TestCase):\n    def _makeOne(self, request, **kw):\n        from pyramid.session import SignedCookieSessionFactory\n        kw.setdefault('secret', 'secret')\n        return SignedCookieSessionFactory(**kw)(request)\n\n    def _serialize(self, value, salt=b'pyramid.session.', hashalg='sha512'):\n        import base64\n        import hashlib\n        import hmac\n        import pickle\n\n        digestmod = lambda: hashlib.new(hashalg)\n        cstruct = pickle.dumps(value, pickle.HIGHEST_PROTOCOL)\n        sig = hmac.new(salt + b'secret', cstruct, digestmod).digest()\n        return base64.urlsafe_b64encode(sig + cstruct).rstrip(b'=')\n\n    def test_reissue_not_triggered(self):\n        import time\n        request = testing.DummyRequest()\n        cookieval = self._serialize((time.time(), 0, {'state': 1}))\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, reissue_time=1)\n        self.assertEqual(session['state'], 1)\n        self.assertFalse(session._dirty)\n\n    def test_reissue_never(self):\n        request = testing.DummyRequest()\n        cookieval = self._serialize((0, 0, {'state': 1}))\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, reissue_time=None, timeout=None)\n        self.assertEqual(session['state'], 1)\n        self.assertFalse(session._dirty)\n\n    def test_custom_salt(self):\n        import time\n        request = testing.DummyRequest()\n        cookieval = self._serialize((time.time(), 0, {'state': 1}), salt=b'f.')\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, salt=b'f.')\n        self.assertEqual(session['state'], 1)\n\n    def test_salt_mismatch(self):\n        import time\n        request = testing.DummyRequest()\n        cookieval = self._serialize((time.time(), 0, {'state': 1}), salt=b'f.')\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, salt=b'g.')\n        self.assertEqual(session, {})\n\n    def test_custom_hashalg(self):\n        import time\n        request = testing.DummyRequest()\n        cookieval = self._serialize((time.time(), 0, {'state': 1}),\n                                    hashalg='sha1')\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, hashalg='sha1')\n        self.assertEqual(session['state'], 1)\n\n    def test_hashalg_mismatch(self):\n        import time\n        request = testing.DummyRequest()\n        cookieval = self._serialize((time.time(), 0, {'state': 1}),\n                                    hashalg='sha1')\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, hashalg='sha256')\n        self.assertEqual(session, {})\n\n    def test_secret_mismatch(self):\n        import time\n        request = testing.DummyRequest()\n        cookieval = self._serialize((time.time(), 0, {'state': 1}))\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, secret='evilsecret')\n        self.assertEqual(session, {})\n\n    def test_custom_serializer(self):\n        import base64\n        from hashlib import sha512\n        import hmac\n        import time\n        request = testing.DummyRequest()\n        serializer = DummySerializer()\n        cstruct = serializer.dumps((time.time(), 0, {'state': 1}))\n        sig = hmac.new(b'pyramid.session.secret', cstruct, sha512).digest()\n        cookieval = base64.urlsafe_b64encode(sig + cstruct).rstrip(b'=')\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, serializer=serializer)\n        self.assertEqual(session['state'], 1)\n\n    def test_invalid_data_size(self):\n        from hashlib import sha512\n        import base64\n        request = testing.DummyRequest()\n        num_bytes = sha512().digest_size - 1\n        cookieval = base64.b64encode(b' ' * num_bytes)\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request)\n        self.assertEqual(session, {})\n\n    def test_very_long_key(self):\n        verylongkey = b'a' * 1024\n        import webob\n        request = testing.DummyRequest()\n        session = self._makeOne(request, secret=verylongkey)\n        session['a'] = 1\n        callbacks = request.response_callbacks\n        self.assertEqual(len(callbacks), 1)\n        response = webob.Response()\n\n        try:\n            result = callbacks[0](request, response)\n        except TypeError: # pragma: no cover\n            self.fail('HMAC failed to initialize due to key length.')\n\n        self.assertEqual(result, None)\n        self.assertTrue('Set-Cookie' in dict(response.headerlist))",
                                "ast_type_str": "ClassDef",
                                "start_lineno": 299,
                                "end_lineno": 415,
                                "parent": null
                            }
                        }
                    ],
                    "deleted_entities": []
                }
            ]
        }
    ],
    "old_commit_hash": "551e8c69a90883072b905c5b2eb19fd50fa53535^",
    "new_commit_hash": "551e8c69a90883072b905c5b2eb19fd50fa53535",
    "commit_message": "Merge branch 'fix.1247'",
    "commit_date": "2014-02-27T16:54:04-05:00",
    "metadata": {}
}
{
    "repo_name": "pyramid",
    "new_commit_hash": "551e8c69a90883072b905c5b2eb19fd50fa53535",
    "test_file_codes": [
        "import json\nimport unittest\nfrom pyramid import testing\n\nclass SharedCookieSessionTests(object):\n\n    def test_ctor_no_cookie(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        self.assertEqual(dict(session), {})\n\n    def test_instance_conforms(self):\n        from zope.interface.verify import verifyObject\n        from pyramid.interfaces import ISession\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        verifyObject(ISession, session)\n\n    def test_ctor_with_cookie_still_valid(self):\n        import time\n        request = testing.DummyRequest()\n        cookieval = self._serialize((time.time(), 0, {'state': 1}))\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request)\n        self.assertEqual(dict(session), {'state':1})\n\n    def test_ctor_with_cookie_expired(self):\n        request = testing.DummyRequest()\n        cookieval = self._serialize((0, 0, {'state': 1}))\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request)\n        self.assertEqual(dict(session), {})\n\n    def test_ctor_with_bad_cookie_cannot_deserialize(self):\n        request = testing.DummyRequest()\n        request.cookies['session'] = 'abc'\n        session = self._makeOne(request)\n        self.assertEqual(dict(session), {})\n\n    def test_ctor_with_bad_cookie_not_tuple(self):\n        request = testing.DummyRequest()\n        cookieval = self._serialize('abc')\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request)\n        self.assertEqual(dict(session), {})\n\n    def test_timeout(self):\n        import time\n        request = testing.DummyRequest()\n        cookieval = self._serialize((time.time() - 5, 0, {'state': 1}))\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, timeout=1)\n        self.assertEqual(dict(session), {})\n\n    def test_timeout_never(self):\n        import time\n        request = testing.DummyRequest()\n        LONG_TIME = 31536000\n        cookieval = self._serialize((time.time() + LONG_TIME, 0, {'state': 1}))\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, timeout=None)\n        self.assertEqual(dict(session), {'state': 1})\n\n    def test_changed(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        self.assertEqual(session.changed(), None)\n        self.assertTrue(session._dirty)\n\n    def test_invalidate(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        session['a'] = 1\n        self.assertEqual(session.invalidate(), None)\n        self.assertFalse('a' in session)\n\n    def test_reissue_triggered(self):\n        import time\n        request = testing.DummyRequest()\n        cookieval = self._serialize((time.time() - 2, 0, {'state': 1}))\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request)\n        self.assertEqual(session['state'], 1)\n        self.assertTrue(session._dirty)\n\n    def test__set_cookie_on_exception(self):\n        request = testing.DummyRequest()\n        request.exception = True\n        session = self._makeOne(request)\n        session._cookie_on_exception = False\n        response = DummyResponse()\n        self.assertEqual(session._set_cookie(response), False)\n\n    def test__set_cookie_on_exception_no_request_exception(self):\n        import webob\n        request = testing.DummyRequest()\n        request.exception = None\n        session = self._makeOne(request)\n        session._cookie_on_exception = False\n        response = webob.Response()\n        self.assertEqual(session._set_cookie(response), True)\n        self.assertEqual(response.headerlist[-1][0], 'Set-Cookie')\n\n    def test__set_cookie_cookieval_too_long(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        session['abc'] = 'x'*100000\n        response = DummyResponse()\n        self.assertRaises(ValueError, session._set_cookie, response)\n\n    def test__set_cookie_real_webob_response(self):\n        import webob\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        session['abc'] = 'x'\n        response = webob.Response()\n        self.assertEqual(session._set_cookie(response), True)\n        self.assertEqual(response.headerlist[-1][0], 'Set-Cookie')\n\n    def test__set_cookie_options(self):\n        from pyramid.response import Response\n        request = testing.DummyRequest()\n        request.exception = None\n        session = self._makeOne(request,\n                                cookie_name='abc',\n                                path='/foo',\n                                domain='localhost',\n                                secure=True,\n                                httponly=True,\n                                )\n        session['abc'] = 'x'\n        response = Response()\n        self.assertEqual(session._set_cookie(response), True)\n        cookieval = response.headerlist[-1][1]\n        val, domain, path, secure, httponly = [x.strip() for x in\n                                               cookieval.split(';')]\n        self.assertTrue(val.startswith('abc='))\n        self.assertEqual(domain, 'Domain=localhost')\n        self.assertEqual(path, 'Path=/foo')\n        self.assertEqual(secure, 'secure')\n        self.assertEqual(httponly, 'HttpOnly')\n\n    def test_flash_default(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        session.flash('msg1')\n        session.flash('msg2')\n        self.assertEqual(session['_f_'], ['msg1', 'msg2'])\n\n    def test_flash_allow_duplicate_false(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        session.flash('msg1')\n        session.flash('msg1', allow_duplicate=False)\n        self.assertEqual(session['_f_'], ['msg1'])\n\n    def test_flash_allow_duplicate_true_and_msg_not_in_storage(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        session.flash('msg1', allow_duplicate=True)\n        self.assertEqual(session['_f_'], ['msg1'])\n\n    def test_flash_allow_duplicate_false_and_msg_not_in_storage(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        session.flash('msg1', allow_duplicate=False)\n        self.assertEqual(session['_f_'], ['msg1'])\n\n    def test_flash_mixed(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        session.flash('warn1', 'warn')\n        session.flash('warn2', 'warn')\n        session.flash('err1', 'error')\n        session.flash('err2', 'error')\n        self.assertEqual(session['_f_warn'], ['warn1', 'warn2'])\n\n    def test_pop_flash_default_queue(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        queue = ['one', 'two']\n        session['_f_'] = queue\n        result = session.pop_flash()\n        self.assertEqual(result, queue)\n        self.assertEqual(session.get('_f_'), None)\n\n    def test_pop_flash_nodefault_queue(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        queue = ['one', 'two']\n        session['_f_error'] = queue\n        result = session.pop_flash('error')\n        self.assertEqual(result, queue)\n        self.assertEqual(session.get('_f_error'), None)\n\n    def test_peek_flash_default_queue(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        queue = ['one', 'two']\n        session['_f_'] = queue\n        result = session.peek_flash()\n        self.assertEqual(result, queue)\n        self.assertEqual(session.get('_f_'), queue)\n\n    def test_peek_flash_nodefault_queue(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        queue = ['one', 'two']\n        session['_f_error'] = queue\n        result = session.peek_flash('error')\n        self.assertEqual(result, queue)\n        self.assertEqual(session.get('_f_error'), queue)\n\n    def test_new_csrf_token(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        token = session.new_csrf_token()\n        self.assertEqual(token, session['_csrft_'])\n\n    def test_get_csrf_token(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        session['_csrft_'] = 'token'\n        token = session.get_csrf_token()\n        self.assertEqual(token, 'token')\n        self.assertTrue('_csrft_' in session)\n\n    def test_get_csrf_token_new(self):\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        token = session.get_csrf_token()\n        self.assertTrue(token)\n        self.assertTrue('_csrft_' in session)\n\n    def test_no_set_cookie_with_exception(self):\n        import webob\n        request = testing.DummyRequest()\n        request.exception = True\n        session = self._makeOne(request, set_on_exception=False)\n        session['a'] = 1\n        callbacks = request.response_callbacks\n        self.assertEqual(len(callbacks), 1)\n        response = webob.Response()\n        result = callbacks[0](request, response)\n        self.assertEqual(result, None)\n        self.assertFalse('Set-Cookie' in dict(response.headerlist))\n\n    def test_set_cookie_with_exception(self):\n        import webob\n        request = testing.DummyRequest()\n        request.exception = True\n        session = self._makeOne(request)\n        session['a'] = 1\n        callbacks = request.response_callbacks\n        self.assertEqual(len(callbacks), 1)\n        response = webob.Response()\n        result = callbacks[0](request, response)\n        self.assertEqual(result, None)\n        self.assertTrue('Set-Cookie' in dict(response.headerlist))\n\n    def test_cookie_is_set(self):\n        import webob\n        request = testing.DummyRequest()\n        session = self._makeOne(request)\n        session['a'] = 1\n        callbacks = request.response_callbacks\n        self.assertEqual(len(callbacks), 1)\n        response = webob.Response()\n        result = callbacks[0](request, response)\n        self.assertEqual(result, None)\n        self.assertTrue('Set-Cookie' in dict(response.headerlist))\n\nclass TestBaseCookieSession(SharedCookieSessionTests, unittest.TestCase):\n    def _makeOne(self, request, **kw):\n        from pyramid.session import BaseCookieSessionFactory\n        serializer = DummySerializer()\n        return BaseCookieSessionFactory(serializer, **kw)(request)\n\n    def _serialize(self, value):\n        return json.dumps(value)\n\n    def test_reissue_not_triggered(self):\n        import time\n        request = testing.DummyRequest()\n        cookieval = self._serialize((time.time(), 0, {'state': 1}))\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, reissue_time=1)\n        self.assertEqual(session['state'], 1)\n        self.assertFalse(session._dirty)\n\n    def test_reissue_never(self):\n        request = testing.DummyRequest()\n        cookieval = self._serialize((0, 0, {'state': 1}))\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, reissue_time=None, timeout=None)\n        self.assertEqual(session['state'], 1)\n        self.assertFalse(session._dirty)\n\nclass TestSignedCookieSession(SharedCookieSessionTests, unittest.TestCase):\n    def _makeOne(self, request, **kw):\n        from pyramid.session import SignedCookieSessionFactory\n        kw.setdefault('secret', 'secret')\n        return SignedCookieSessionFactory(**kw)(request)\n\n    def _serialize(self, value, salt=b'pyramid.session.', hashalg='sha512'):\n        import base64\n        import hashlib\n        import hmac\n        import pickle\n\n        digestmod = lambda: hashlib.new(hashalg)\n        cstruct = pickle.dumps(value, pickle.HIGHEST_PROTOCOL)\n        sig = hmac.new(salt + b'secret', cstruct, digestmod).digest()\n        return base64.urlsafe_b64encode(sig + cstruct).rstrip(b'=')\n\n    def test_reissue_not_triggered(self):\n        import time\n        request = testing.DummyRequest()\n        cookieval = self._serialize((time.time(), 0, {'state': 1}))\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, reissue_time=1)\n        self.assertEqual(session['state'], 1)\n        self.assertFalse(session._dirty)\n\n    def test_reissue_never(self):\n        request = testing.DummyRequest()\n        cookieval = self._serialize((0, 0, {'state': 1}))\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, reissue_time=None, timeout=None)\n        self.assertEqual(session['state'], 1)\n        self.assertFalse(session._dirty)\n\n    def test_custom_salt(self):\n        import time\n        request = testing.DummyRequest()\n        cookieval = self._serialize((time.time(), 0, {'state': 1}), salt=b'f.')\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, salt=b'f.')\n        self.assertEqual(session['state'], 1)\n\n    def test_salt_mismatch(self):\n        import time\n        request = testing.DummyRequest()\n        cookieval = self._serialize((time.time(), 0, {'state': 1}), salt=b'f.')\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, salt=b'g.')\n        self.assertEqual(session, {})\n\n    def test_custom_hashalg(self):\n        import time\n        request = testing.DummyRequest()\n        cookieval = self._serialize((time.time(), 0, {'state': 1}),\n                                    hashalg='sha1')\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, hashalg='sha1')\n        self.assertEqual(session['state'], 1)\n\n    def test_hashalg_mismatch(self):\n        import time\n        request = testing.DummyRequest()\n        cookieval = self._serialize((time.time(), 0, {'state': 1}),\n                                    hashalg='sha1')\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, hashalg='sha256')\n        self.assertEqual(session, {})\n\n    def test_secret_mismatch(self):\n        import time\n        request = testing.DummyRequest()\n        cookieval = self._serialize((time.time(), 0, {'state': 1}))\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, secret='evilsecret')\n        self.assertEqual(session, {})\n\n    def test_custom_serializer(self):\n        import base64\n        from hashlib import sha512\n        import hmac\n        import time\n        request = testing.DummyRequest()\n        serializer = DummySerializer()\n        cstruct = serializer.dumps((time.time(), 0, {'state': 1}))\n        sig = hmac.new(b'pyramid.session.secret', cstruct, sha512).digest()\n        cookieval = base64.urlsafe_b64encode(sig + cstruct).rstrip(b'=')\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, serializer=serializer)\n        self.assertEqual(session['state'], 1)\n\n    def test_invalid_data_size(self):\n        from hashlib import sha512\n        import base64\n        request = testing.DummyRequest()\n        num_bytes = sha512().digest_size - 1\n        cookieval = base64.b64encode(b' ' * num_bytes)\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request)\n        self.assertEqual(session, {})\n\n    def test_very_long_key(self):\n        verylongkey = b'a' * 1024\n        import webob\n        request = testing.DummyRequest()\n        session = self._makeOne(request, secret=verylongkey)\n        session['a'] = 1\n        callbacks = request.response_callbacks\n        self.assertEqual(len(callbacks), 1)\n        response = webob.Response()\n\n        try:\n            result = callbacks[0](request, response)\n        except TypeError: # pragma: no cover\n            self.fail('HMAC failed to initialize due to key length.')\n\n        self.assertEqual(result, None)\n        self.assertTrue('Set-Cookie' in dict(response.headerlist))\n\nclass TestUnencryptedCookieSession(SharedCookieSessionTests, unittest.TestCase):\n    def setUp(self):\n        super(TestUnencryptedCookieSession, self).setUp()\n        from zope.deprecation import __show__\n        __show__.off()\n\n    def tearDown(self):\n        super(TestUnencryptedCookieSession, self).tearDown()\n        from zope.deprecation import __show__\n        __show__.on()\n        \n    def _makeOne(self, request, **kw):\n        from pyramid.session import UnencryptedCookieSessionFactoryConfig\n        self._rename_cookie_var(kw, 'path', 'cookie_path')\n        self._rename_cookie_var(kw, 'domain', 'cookie_domain')\n        self._rename_cookie_var(kw, 'secure', 'cookie_secure')\n        self._rename_cookie_var(kw, 'httponly', 'cookie_httponly')\n        self._rename_cookie_var(kw, 'set_on_exception', 'cookie_on_exception')\n        return UnencryptedCookieSessionFactoryConfig('secret', **kw)(request)\n\n    def _rename_cookie_var(self, kw, src, dest):\n        if src in kw:\n            kw.setdefault(dest, kw.pop(src))\n\n    def _serialize(self, value):\n        from pyramid.compat import bytes_\n        from pyramid.session import signed_serialize\n        return bytes_(signed_serialize(value, 'secret'))\n\n    def test_serialize_option(self):\n        from pyramid.response import Response\n        secret = 'secret'\n        request = testing.DummyRequest()\n        session = self._makeOne(request,\n            signed_serialize=dummy_signed_serialize)\n        session['key'] = 'value'\n        response = Response()\n        self.assertEqual(session._set_cookie(response), True)\n        cookie = response.headerlist[-1][1]\n        expected_cookieval = dummy_signed_serialize(\n            (session.accessed, session.created, {'key': 'value'}), secret)\n        response = Response()\n        response.set_cookie('session', expected_cookieval)\n        expected_cookie = response.headerlist[-1][1]\n        self.assertEqual(cookie, expected_cookie)\n\n    def test_deserialize_option(self):\n        import time\n        secret = 'secret'\n        request = testing.DummyRequest()\n        accessed = time.time()\n        state = {'key': 'value'}\n        cookieval = dummy_signed_serialize((accessed, accessed, state), secret)\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request,\n            signed_deserialize=dummy_signed_deserialize)\n        self.assertEqual(dict(session), state)\n\ndef dummy_signed_serialize(data, secret):\n    import base64\n    from pyramid.compat import pickle, bytes_\n    pickled = pickle.dumps(data)\n    return base64.b64encode(bytes_(secret)) + base64.b64encode(pickled)\n\ndef dummy_signed_deserialize(serialized, secret):\n    import base64\n    from pyramid.compat import pickle, bytes_\n    serialized_data = base64.b64decode(\n        serialized[len(base64.b64encode(bytes_(secret))):])\n    return pickle.loads(serialized_data)\n\nclass Test_manage_accessed(unittest.TestCase):\n    def _makeOne(self, wrapped):\n        from pyramid.session import manage_accessed\n        return manage_accessed(wrapped)\n\n    def test_accessed_set(self):\n        request = testing.DummyRequest()\n        session = DummySessionFactory(request)\n        session.renewed = 0\n        wrapper = self._makeOne(session.__class__.get)\n        wrapper(session, 'a')\n        self.assertNotEqual(session.accessed, None)\n        self.assertTrue(session._dirty)\n\n    def test_accessed_without_renew(self):\n        import time\n        request = testing.DummyRequest()\n        session = DummySessionFactory(request)\n        session._reissue_time = 5\n        session.renewed = time.time()\n        wrapper = self._makeOne(session.__class__.get)\n        wrapper(session, 'a')\n        self.assertNotEqual(session.accessed, None)\n        self.assertFalse(session._dirty)\n\n    def test_already_dirty(self):\n        request = testing.DummyRequest()\n        session = DummySessionFactory(request)\n        session.renewed = 0\n        session._dirty = True\n        session['a'] = 1\n        wrapper = self._makeOne(session.__class__.get)\n        self.assertEqual(wrapper.__doc__, session.get.__doc__)\n        result = wrapper(session, 'a')\n        self.assertEqual(result, 1)\n        callbacks = request.response_callbacks\n        self.assertEqual(len(callbacks), 0)\n\nclass Test_manage_changed(unittest.TestCase):\n    def _makeOne(self, wrapped):\n        from pyramid.session import manage_changed\n        return manage_changed(wrapped)\n\n    def test_it(self):\n        request = testing.DummyRequest()\n        session = DummySessionFactory(request)\n        wrapper = self._makeOne(session.__class__.__setitem__)\n        wrapper(session, 'a', 1)\n        self.assertNotEqual(session.accessed, None)\n        self.assertTrue(session._dirty)\n\ndef serialize(data, secret):\n    import hmac\n    import base64\n    from hashlib import sha1\n    from pyramid.compat import bytes_\n    from pyramid.compat import native_\n    from pyramid.compat import pickle\n    pickled = pickle.dumps(data, pickle.HIGHEST_PROTOCOL)\n    sig = hmac.new(bytes_(secret), pickled, sha1).hexdigest()\n    return sig + native_(base64.b64encode(pickled))\n\nclass Test_signed_serialize(unittest.TestCase):\n    def _callFUT(self, data, secret):\n        from pyramid.session import signed_serialize\n        return signed_serialize(data, secret)\n\n    def test_it(self):\n        expected = serialize('123', 'secret')\n        result = self._callFUT('123', 'secret')\n        self.assertEqual(result, expected)\n        \nclass Test_signed_deserialize(unittest.TestCase):\n    def _callFUT(self, serialized, secret, hmac=None):\n        if hmac is None:\n            import hmac\n        from pyramid.session import signed_deserialize\n        return signed_deserialize(serialized, secret, hmac=hmac)\n\n    def test_it(self):\n        serialized = serialize('123', 'secret')\n        result = self._callFUT(serialized, 'secret')\n        self.assertEqual(result, '123')\n\n    def test_invalid_bits(self):\n        serialized = serialize('123', 'secret')\n        self.assertRaises(ValueError, self._callFUT, serialized, 'seekrit')\n\n    def test_invalid_len(self):\n        class hmac(object):\n            def new(self, *arg):\n                return self\n            def hexdigest(self):\n                return '1234'\n        serialized = serialize('123', 'secret123')\n        self.assertRaises(ValueError, self._callFUT, serialized, 'secret',\n                          hmac=hmac())\n        \n    def test_it_bad_encoding(self):\n        serialized = 'bad' + serialize('123', 'secret')\n        self.assertRaises(ValueError, self._callFUT, serialized, 'secret')\n\nclass Test_check_csrf_token(unittest.TestCase):\n    def _callFUT(self, *args, **kwargs):\n        from ..session import check_csrf_token\n        return check_csrf_token(*args, **kwargs)\n\n    def test_success_token(self):\n        request = testing.DummyRequest()\n        request.params['csrf_token'] = request.session.get_csrf_token()\n        self.assertEqual(self._callFUT(request, token='csrf_token'), True)\n\n    def test_success_header(self):\n        request = testing.DummyRequest()\n        request.headers['X-CSRF-Token'] = request.session.get_csrf_token()\n        self.assertEqual(self._callFUT(request, header='X-CSRF-Token'), True)\n\n    def test_success_default_token(self):\n        request = testing.DummyRequest()\n        request.params['csrf_token'] = request.session.get_csrf_token()\n        self.assertEqual(self._callFUT(request), True)\n\n    def test_success_default_header(self):\n        request = testing.DummyRequest()\n        request.headers['X-CSRF-Token'] = request.session.get_csrf_token()\n        self.assertEqual(self._callFUT(request), True)\n\n    def test_failure_raises(self):\n        from pyramid.exceptions import BadCSRFToken\n        request = testing.DummyRequest()\n        self.assertRaises(BadCSRFToken, self._callFUT, request,\n                          'csrf_token')\n\n    def test_failure_no_raises(self):\n        request = testing.DummyRequest()\n        result = self._callFUT(request, 'csrf_token', raises=False)\n        self.assertEqual(result, False)\n\nclass DummySerializer(object):\n    def dumps(self, value):\n        return json.dumps(value).encode('utf-8')\n\n    def loads(self, value):\n        return json.loads(value.decode('utf-8'))\n\nclass DummySessionFactory(dict):\n    _dirty = False\n    _cookie_name = 'session'\n    _cookie_max_age = None\n    _cookie_path = '/'\n    _cookie_domain = None\n    _cookie_secure = False\n    _cookie_httponly = False\n    _timeout = 1200\n    _reissue_time = 0\n\n    def __init__(self, request):\n        self.request = request\n        dict.__init__(self, {})\n\n    def changed(self):\n        self._dirty = True\n\nclass DummyResponse(object):\n    def __init__(self):\n        self.headerlist = []\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 610ms\nPrepared 1 package in 774ms\nInstalled 9 packages in 13ms\n + pastedeploy==3.1.0\n + pyramid==1.5b1 (from file:///home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_551e8c69a90883072b905c5b2eb19fd50fa53535)\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 19ms\nInstalled 10 packages in 6ms\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 6ms\nInstalled 12 packages in 8ms\n + cachetools==5.5.0\n + chardet==5.2.0\n + colorama==0.4.6\n + exceptiongroup==1.2.2\n + iniconfig==2.0.0\n + packaging==24.2\n + pluggy==1.5.0\n + pyproject-api==1.8.0\n + pytest==8.3.4\n + tomli==2.2.1\n + tox==4.23.2\n + typing-extensions==4.12.2\n",
    "new_commit_res_code": 1,
    "new_commit_res_stdout": "============================= test session starts ==============================\nplatform linux -- Python 3.8.20, pytest-8.3.4, pluggy-1.5.0\nrootdir: /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_551e8c69a90883072b905c5b2eb19fd50fa53535\ncollected 972 items\n\nr2e_tests/test_1.py .................................................... [  5%]\n................................................................FFFFFF   [ 12%]\nr2e_tests/test_config/test_adapters.py .FF..............F...             [ 14%]\nr2e_tests/test_config/test_assets.py ...........FF...................... [ 18%]\n.....F..........................                                         [ 21%]\nr2e_tests/test_config/test_factories.py ..................               [ 23%]\nr2e_tests/test_config/test_i18n.py FFF.FF...                             [ 24%]\nr2e_tests/test_config/test_init.py ..................................... [ 28%]\n.F..F....................F...........F....................FF...FFF...... [ 35%]\n..............                                                           [ 37%]\nr2e_tests/test_config/test_predicates.py ............................... [ 40%]\n........................................                                 [ 44%]\nr2e_tests/test_config/test_rendering.py ...                              [ 44%]\nr2e_tests/test_config/test_routes.py ........................            [ 47%]\nr2e_tests/test_config/test_security.py ..........                        [ 48%]\nr2e_tests/test_config/test_settings.py .......................           [ 50%]\nr2e_tests/test_config/test_testing.py ............                       [ 51%]\nr2e_tests/test_config/test_tweens.py .................................   [ 55%]\nr2e_tests/test_config/test_util.py ..................................... [ 58%]\n.............                                                            [ 60%]\nr2e_tests/test_config/test_views.py .....................F............F. [ 63%]\n..................................FF.................................... [ 71%]\n..FF.................................................................... [ 78%]\n.....FF.........F...F....F.............................................. [ 86%]\n..............F                                                          [ 87%]\nr2e_tests/test_scripts/test_common.py ...                                [ 88%]\nr2e_tests/test_scripts/test_pcreate.py ..........                        [ 89%]\nr2e_tests/test_scripts/test_pdistreport.py ..                            [ 89%]\nr2e_tests/test_scripts/test_prequest.py F.FFFFFFFFF.F.FFF.               [ 91%]\nr2e_tests/test_scripts/test_proutes.py ...........                       [ 92%]\nr2e_tests/test_scripts/test_pserve.py ............................       [ 95%]\nr2e_tests/test_scripts/test_pshell.py ...................                [ 97%]\nr2e_tests/test_scripts/test_ptweens.py .....                             [ 97%]\nr2e_tests/test_scripts/test_pviews.py ................F......            [100%]\n\n=================================== FAILURES ===================================\n_________________ Test_check_csrf_token.test_failure_no_raises _________________\n\nself = <r2e_tests.test_1.Test_check_csrf_token testMethod=test_failure_no_raises>\n\n    def test_failure_no_raises(self):\n        request = testing.DummyRequest()\n>       result = self._callFUT(request, 'csrf_token', raises=False)\n\nr2e_tests/test_1.py:623: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = <r2e_tests.test_1.Test_check_csrf_token testMethod=test_failure_no_raises>\nargs = (<pyramid.testing.DummyRequest object at 0x7db721806fa0>, 'csrf_token')\nkwargs = {'raises': False}\n\n    def _callFUT(self, *args, **kwargs):\n>       from ..session import check_csrf_token\nE       ValueError: attempted relative import beyond top-level package\n\nr2e_tests/test_1.py:592: ValueError\n__________________ Test_check_csrf_token.test_failure_raises ___________________\n\nself = <r2e_tests.test_1.Test_check_csrf_token testMethod=test_failure_raises>\n\n    def test_failure_raises(self):\n        from pyramid.exceptions import BadCSRFToken\n        request = testing.DummyRequest()\n>       self.assertRaises(BadCSRFToken, self._callFUT, request,\n                          'csrf_token')\n\nr2e_tests/test_1.py:618: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\n    def _callFUT(self, *args, **kwargs):\n>       from ..session import check_csrf_token\nE       ValueError: attempted relative import beyond top-level package\n\nr2e_tests/test_1.py:592: ValueError\n______________ Test_check_csrf_token.test_success_default_header _______________\n\nself = <r2e_tests.test_1.Test_check_csrf_token testMethod=test_success_default_header>\n\n    def test_success_default_header(self):\n        request = testing.DummyRequest()\n        request.headers['X-CSRF-Token'] = request.session.get_csrf_token()\n>       self.assertEqual(self._callFUT(request), True)\n\nr2e_tests/test_1.py:613: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = <r2e_tests.test_1.Test_check_csrf_token testMethod=test_success_default_header>\nargs = (<pyramid.testing.DummyRequest object at 0x7db7212560a0>,), kwargs = {}\n\n    def _callFUT(self, *args, **kwargs):\n>       from ..session import check_csrf_token\nE       ValueError: attempted relative import beyond top-level package\n\nr2e_tests/test_1.py:592: ValueError\n_______________ Test_check_csrf_token.test_success_default_token _______________\n\nself = <r2e_tests.test_1.Test_check_csrf_token testMethod=test_success_default_token>\n\n    def test_success_default_token(self):\n        request = testing.DummyRequest()\n        request.params['csrf_token'] = request.session.get_csrf_token()\n>       self.assertEqual(self._callFUT(request), True)\n\nr2e_tests/test_1.py:608: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = <r2e_tests.test_1.Test_check_csrf_token testMethod=test_success_default_token>\nargs = (<pyramid.testing.DummyRequest object at 0x7db721213160>,), kwargs = {}\n\n    def _callFUT(self, *args, **kwargs):\n>       from ..session import check_csrf_token\nE       ValueError: attempted relative import beyond top-level package\n\nr2e_tests/test_1.py:592: ValueError\n__________________ Test_check_csrf_token.test_success_header ___________________\n\nself = <r2e_tests.test_1.Test_check_csrf_token testMethod=test_success_header>\n\n    def test_success_header(self):\n        request = testing.DummyRequest()\n        request.headers['X-CSRF-Token'] = request.session.get_csrf_token()\n>       self.assertEqual(self._callFUT(request, header='X-CSRF-Token'), True)\n\nr2e_tests/test_1.py:603: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = <r2e_tests.test_1.Test_check_csrf_token testMethod=test_success_header>\nargs = (<pyramid.testing.DummyRequest object at 0x7db72121f880>,)\nkwargs = {'header': 'X-CSRF-Token'}\n\n    def _callFUT(self, *args, **kwargs):\n>       from ..session import check_csrf_token\nE       ValueError: attempted relative import beyond top-level package\n\nr2e_tests/test_1.py:592: ValueError\n___________________ Test_check_csrf_token.test_success_token ___________________\n\nself = <r2e_tests.test_1.Test_check_csrf_token testMethod=test_success_token>\n\n    def test_success_token(self):\n        request = testing.DummyRequest()\n        request.params['csrf_token'] = request.session.get_csrf_token()\n>       self.assertEqual(self._callFUT(request, token='csrf_token'), True)\n\nr2e_tests/test_1.py:598: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = <r2e_tests.test_1.Test_check_csrf_token testMethod=test_success_token>\nargs = (<pyramid.testing.DummyRequest object at 0x7db7213fb910>,)\nkwargs = {'token': 'csrf_token'}\n\n    def _callFUT(self, *args, **kwargs):\n>       from ..session import check_csrf_token\nE       ValueError: attempted relative import beyond top-level package\n\nr2e_tests/test_1.py:592: 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 0x7db721172640>, <r2e_tests.test_config.test_adapters.DummyIface object at 0x7db721172640>)\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 0x7db721172640>, <r2e_tests.test_config.test_adapters.DummyIface object at 0x7db721172640>), <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 0x7db721414700>\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 0x7db721414700>, <InterfaceClass pyramid.interfaces.ITraverser>, '')\n\n.venv/lib/python3.8/site-packages/zope/interface/registry.py:368: ComponentLookupError\n_________ TestOverrideProvider.test_get_resource_filename_no_overrides _________\n\nself = <r2e_tests.test_config.test_assets.TestOverrideProvider testMethod=test_get_resource_filename_no_overrides>\n\n    def test_get_resource_filename_no_overrides(self):\n        import os\n        resource_name = 'test_assets.py'\n        import pyramid.tests.test_config\n        provider = self._makeOne(pyramid.tests.test_config)\n        here = os.path.dirname(os.path.abspath(__file__))\n        expected = os.path.join(here, resource_name)\n        result = provider.get_resource_filename(None, resource_name)\n>       self.assertEqual(result, expected)\nE       AssertionError: '/hom[73 chars]05c5b2eb19fd50fa53535/pyramid/tests/test_config/test_assets.py' != '/hom[73 chars]05c5b2eb19fd50fa53535/r2e_tests/test_config/test_assets.py'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_551e8c69a90883072b905c5b2eb19fd50fa53535/pyramid/tests/test_config/test_assets.py\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_551e8c69a90883072b905c5b2eb19fd50fa53535/r2e_tests/test_config/test_assets.py\nE       ?                                                                                                     ^^^\n\nr2e_tests/test_config/test_assets.py:158: AssertionError\n____ TestOverrideProvider.test_get_resource_filename_override_returns_None _____\n\nself = <r2e_tests.test_config.test_assets.TestOverrideProvider testMethod=test_get_resource_filename_override_returns_None>\n\n    def test_get_resource_filename_override_returns_None(self):\n        overrides = DummyOverrides(None)\n        self._registerOverrides(overrides)\n        import os\n        resource_name = 'test_assets.py'\n        import pyramid.tests.test_config\n        provider = self._makeOne(pyramid.tests.test_config)\n        here = os.path.dirname(os.path.abspath(__file__))\n        expected = os.path.join(here, resource_name)\n        result = provider.get_resource_filename(None, resource_name)\n>       self.assertEqual(result, expected)\nE       AssertionError: '/hom[73 chars]05c5b2eb19fd50fa53535/pyramid/tests/test_config/test_assets.py' != '/hom[73 chars]05c5b2eb19fd50fa53535/r2e_tests/test_config/test_assets.py'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_551e8c69a90883072b905c5b2eb19fd50fa53535/pyramid/tests/test_config/test_assets.py\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_551e8c69a90883072b905c5b2eb19fd50fa53535/r2e_tests/test_config/test_assets.py\nE       ?                                                                                                     ^^^\n\nr2e_tests/test_config/test_assets.py:212: AssertionError\n____________________ TestPackageOverrides.test_get_filename ____________________\n\nself = <r2e_tests.test_config.test_assets.TestPackageOverrides testMethod=test_get_filename>\n\n    def test_get_filename(self):\n        import os\n        overrides = [ DummyOverride(None), DummyOverride(\n            ('pyramid.tests.test_config', 'test_assets.py'))]\n        package = DummyPackage('package')\n        po = self._makeOne(package)\n        po.overrides= overrides\n        here = os.path.dirname(os.path.abspath(__file__))\n        expected = os.path.join(here, 'test_assets.py')\n>       self.assertEqual(po.get_filename('whatever'), expected)\nE       AssertionError: '/hom[73 chars]05c5b2eb19fd50fa53535/pyramid/tests/test_config/test_assets.py' != '/hom[73 chars]05c5b2eb19fd50fa53535/r2e_tests/test_config/test_assets.py'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_551e8c69a90883072b905c5b2eb19fd50fa53535/pyramid/tests/test_config/test_assets.py\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_551e8c69a90883072b905c5b2eb19fd50fa53535/r2e_tests/test_config/test_assets.py\nE       ?                                                                                                     ^^^\n\nr2e_tests/test_config/test_assets.py:425: 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:528: in wrapper\n    result = wrapped(self, *arg, **kw)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = <pyramid.config.Configurator object at 0x7db721338e20>\nspecs = ('/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_551e8c69a90883072b905c5b2eb19fd50fa53535/r2e_tests/pkgs/localeapp/locale',)\nintrospectables = []\nspec = '/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_551e8c69a90883072b905c5b2eb19fd50fa53535/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_551e8c69a90883072b905c5b2eb19fd50fa53535/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]72b905c5b2eb19fd50fa53535/pyramid/tests/pkgs/localeapp/locale'] != ['/ho[70 chars]72b905c5b2eb19fd50fa53535/r2e_tests/pkgs/localeapp/locale']\nE       \nE       First differing element 0:\nE       '/hom[68 chars]072b905c5b2eb19fd50fa53535/pyramid/tests/pkgs/localeapp/locale'\nE       '/hom[68 chars]072b905c5b2eb19fd50fa53535/r2e_tests/pkgs/localeapp/locale'\nE       \nE       - ['/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_551e8c69a90883072b905c5b2eb19fd50fa53535/pyramid/tests/pkgs/localeapp/locale']\nE       ?                                                                                                      -- ^^^^^\nE       \nE       + ['/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_551e8c69a90883072b905c5b2eb19fd50fa53535/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]5b2eb19fd50fa53535/pyramid/tests/pkgs/localeapp/locale', 'abc'] != ['/ho[77 chars]5b2eb19fd50fa53535/r2e_tests/pkgs/localeapp/locale', 'abc']\nE       \nE       First differing element 0:\nE       '/hom[68 chars]072b905c5b2eb19fd50fa53535/pyramid/tests/pkgs/localeapp/locale'\nE       '/hom[68 chars]072b905c5b2eb19fd50fa53535/r2e_tests/pkgs/localeapp/locale'\nE       \nE       - ['/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_551e8c69a90883072b905c5b2eb19fd50fa53535/pyramid/tests/pkgs/localeapp/locale',\nE       ?                                                                                                      -- ^^^^^\nE       \nE       + ['/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_551e8c69a90883072b905c5b2eb19fd50fa53535/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]3535/pyramid/tests/pkgs/localeapp/locale', '/h[130 chars]le2'] != ['/ho[91 chars]3535/r2e_tests/pkgs/localeapp/locale', '/home/[122 chars]le2']\nE       \nE       First differing element 0:\nE       '/hom[68 chars]072b905c5b2eb19fd50fa53535/pyramid/tests/pkgs/localeapp/locale'\nE       '/hom[68 chars]072b905c5b2eb19fd50fa53535/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]3535/pyramid/tests/pkgs/localeapp/locale3', '/[269 chars]le2'] != ['/ho[91 chars]3535/r2e_tests/pkgs/localeapp/locale3', '/home[257 chars]le2']\nE       \nE       First differing element 0:\nE       '/hom[69 chars]72b905c5b2eb19fd50fa53535/pyramid/tests/pkgs/localeapp/locale3'\nE       '/hom[69 chars]72b905c5b2eb19fd50fa53535/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:67: 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:123: 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:999: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \npyramid/config/__init__.py:609: in commit\n    self.action_state.execute_actions(introspector=self.introspector)\npyramid/config/__init__.py:1047: in execute_actions\n    for action in resolveConflicts(self.actions):\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nactions = []\n\n    def resolveConflicts(actions):\n        \"\"\"Resolve conflicting actions\n    \n        Given an actions list, identify and try to resolve conflicting actions.\n        Actions conflict if they have the same non-None discriminator.\n        Conflicting actions can be resolved if the include path of one of\n        the actions is a prefix of the includepaths of the other\n        conflicting actions and is unequal to the include paths in the\n        other conflicting actions.\n        \"\"\"\n    \n        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 # not a prefix\n                        or includepath == basepath):\n                        L = conflicts.setdefault(discriminator, [baseinfo])\n                        L.append(action['info'])\n    \n            if conflicts:\n>               raise ConfigurationConflictError(conflicts)\nE               pyramid.exceptions.ConfigurationConflictError: Conflicting configuration actions\nE                 For: ('view', None, '', None, 'd41d8cd98f00b204e9800998ecf8427e')\nE                   Line 4 of file /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_551e8c69a90883072b905c5b2eb19fd50fa53535/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_551e8c69a90883072b905c5b2eb19fd50fa53535/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_551e8c69a90883072b905c5b2eb19fd50fa53535/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_551e8c69a90883072b905c5b2eb19fd50fa53535/pyramid/tests/test_config/pkgs/selfscan/another.py:\nE                       def two(request):\n\npyramid/config/__init__.py:1175: 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:1008: 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:428: 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:1207: 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:1194: 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:1181: 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:1220: 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:1284: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \npyramid/config/__init__.py:498: in _add_predicate\n    self.action(discriminator, register, introspectables=(intr,),\nr2e_tests/test_config/test_init.py:1281: 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]db72102bc70>, 'static', 'r2e_tests.test_config:files', {})] != [(<py[39 chars]db72102bc70>, 'static', 'pyramid.tests.test_config:files', {})]\nE       \nE       First differing element 0:\nE       (<pyr[37 chars]7db72102bc70>, 'static', 'r2e_tests.test_config:files', {})\nE       (<pyr[37 chars]7db72102bc70>, 'static', 'pyramid.tests.test_config:files', {})\nE       \nE         [(<pyramid.config.Configurator object at 0x7db72102bc70>,\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:1755: AssertionError\n_ TestViewsConfigurationMixin.test_add_view_custom_predicate_bests_standard_predicate _\n\nself = <r2e_tests.test_config.test_views.TestViewsConfigurationMixin testMethod=test_add_view_custom_predicate_bests_standard_predicate>\n\n    def test_add_view_custom_predicate_bests_standard_predicate(self):\n        import warnings\n        from pyramid.renderers import null_renderer\n        view = lambda *arg: 'OK'\n        view2 = lambda *arg: 'NOT OK'\n        config = self._makeOne(autocommit=True)\n        def pred1(context, request):\n            return True\n        with warnings.catch_warnings(record=True) as w:\n            warnings.filterwarnings('always')\n            config.add_view(view=view, custom_predicates=(pred1,),\n                        renderer=null_renderer)\n            config.add_view(view=view2, request_method='GET',\n                            renderer=null_renderer)\n>           self.assertEqual(len(w), 1)\nE           AssertionError: 3 != 1\n\nr2e_tests/test_config/test_views.py:1471: AssertionError\n____ TestViewsConfigurationMixin.test_add_view_with_custom_predicates_match ____\n\nself = <r2e_tests.test_config.test_views.TestViewsConfigurationMixin testMethod=test_add_view_with_custom_predicates_match>\n\n    def test_add_view_with_custom_predicates_match(self):\n        import warnings\n        from pyramid.renderers import null_renderer\n        view = lambda *arg: 'OK'\n        config = self._makeOne(autocommit=True)\n        def pred1(context, request):\n            return True\n        def pred2(context, request):\n            return True\n        predicates = (pred1, pred2)\n        with warnings.catch_warnings(record=True) as w:\n            warnings.filterwarnings('always')\n            config.add_view(view=view, custom_predicates=predicates,\n                            renderer=null_renderer)\n>           self.assertEqual(len(w), 1)\nE           AssertionError: 2 != 1\n\nr2e_tests/test_config/test_views.py:1435: AssertionError\n___ TestViewsConfigurationMixin.test_add_view_with_custom_predicates_nomatch ___\n\nself = <r2e_tests.test_config.test_views.TestViewsConfigurationMixin testMethod=test_add_view_with_custom_predicates_nomatch>\n\n    def test_add_view_with_custom_predicates_nomatch(self):\n        import warnings\n        view = lambda *arg: 'OK'\n        config = self._makeOne(autocommit=True)\n        def pred1(context, request):\n            return True\n        def pred2(context, request):\n            return False\n        predicates = (pred1, pred2)\n        with warnings.catch_warnings(record=True) as w:\n            warnings.filterwarnings('always')\n            config.add_view(view=view, custom_predicates=predicates)\n>           self.assertEqual(len(w), 1)\nE           AssertionError: 2 != 1\n\nr2e_tests/test_config/test_views.py:1452: 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:1070: 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:1111: 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:2366: \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:404: 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:2368: 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:2385: \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:404: 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:2387: 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:2406: \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 0x7db7216e7c70> 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:404: 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:2409: 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:2452: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\ncontext = None\nrequest = <r2e_tests.test_config.test_views.DummyRequest object at 0x7db7212265e0>\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:404: 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:2454: 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:2476: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\ncontext = None\nrequest = <r2e_tests.test_config.test_views.DummyRequest object at 0x7db720e3abe0>\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:404: 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:2478: 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:3937: 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_____ 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::TestBaseCookieSession::test__set_cookie_cookieval_too_long\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test__set_cookie_on_exception\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test__set_cookie_on_exception_no_request_exception\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test__set_cookie_options\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test__set_cookie_real_webob_response\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test_changed\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test_cookie_is_set\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test_ctor_no_cookie\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test_ctor_with_bad_cookie_cannot_deserialize\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test_ctor_with_bad_cookie_not_tuple\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test_ctor_with_cookie_expired\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test_ctor_with_cookie_still_valid\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test_flash_allow_duplicate_false\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test_flash_allow_duplicate_false_and_msg_not_in_storage\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test_flash_allow_duplicate_true_and_msg_not_in_storage\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test_flash_default\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test_flash_mixed\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test_get_csrf_token\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test_get_csrf_token_new\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test_instance_conforms\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test_invalidate\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test_new_csrf_token\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test_no_set_cookie_with_exception\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test_peek_flash_default_queue\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test_peek_flash_nodefault_queue\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test_pop_flash_default_queue\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test_pop_flash_nodefault_queue\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test_reissue_never\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test_reissue_not_triggered\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test_reissue_triggered\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test_set_cookie_with_exception\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test_timeout\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test_timeout_never\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test__set_cookie_cookieval_too_long\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test__set_cookie_on_exception\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test__set_cookie_on_exception_no_request_exception\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test__set_cookie_options\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test__set_cookie_real_webob_response\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_changed\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_cookie_is_set\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_ctor_no_cookie\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_ctor_with_bad_cookie_cannot_deserialize\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_ctor_with_bad_cookie_not_tuple\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_ctor_with_cookie_expired\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_ctor_with_cookie_still_valid\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_custom_hashalg\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_custom_salt\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_custom_serializer\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_flash_allow_duplicate_false\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_flash_allow_duplicate_false_and_msg_not_in_storage\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_flash_allow_duplicate_true_and_msg_not_in_storage\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_flash_default\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_flash_mixed\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_get_csrf_token\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_get_csrf_token_new\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_hashalg_mismatch\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_instance_conforms\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_invalid_data_size\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_invalidate\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_new_csrf_token\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_no_set_cookie_with_exception\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_peek_flash_default_queue\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_peek_flash_nodefault_queue\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_pop_flash_default_queue\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_pop_flash_nodefault_queue\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_reissue_never\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_reissue_not_triggered\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_reissue_triggered\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_salt_mismatch\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_secret_mismatch\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_set_cookie_with_exception\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_timeout\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_timeout_never\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_very_long_key\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test__set_cookie_cookieval_too_long\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test__set_cookie_on_exception\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test__set_cookie_on_exception_no_request_exception\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test__set_cookie_options\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test__set_cookie_real_webob_response\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test_changed\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test_cookie_is_set\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test_ctor_no_cookie\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test_ctor_with_bad_cookie_cannot_deserialize\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test_ctor_with_bad_cookie_not_tuple\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test_ctor_with_cookie_expired\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test_ctor_with_cookie_still_valid\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test_deserialize_option\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test_flash_allow_duplicate_false\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test_flash_allow_duplicate_false_and_msg_not_in_storage\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test_flash_allow_duplicate_true_and_msg_not_in_storage\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test_flash_default\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test_flash_mixed\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test_get_csrf_token\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test_get_csrf_token_new\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test_instance_conforms\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test_invalidate\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test_new_csrf_token\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test_no_set_cookie_with_exception\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test_peek_flash_default_queue\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test_peek_flash_nodefault_queue\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test_pop_flash_default_queue\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test_pop_flash_nodefault_queue\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test_reissue_triggered\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test_serialize_option\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test_set_cookie_with_exception\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test_timeout\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test_timeout_never\nPASSED r2e_tests/test_1.py::Test_manage_accessed::test_accessed_set\nPASSED r2e_tests/test_1.py::Test_manage_accessed::test_accessed_without_renew\nPASSED r2e_tests/test_1.py::Test_manage_accessed::test_already_dirty\nPASSED r2e_tests/test_1.py::Test_manage_changed::test_it\nPASSED r2e_tests/test_1.py::Test_signed_serialize::test_it\nPASSED r2e_tests/test_1.py::Test_signed_deserialize::test_invalid_bits\nPASSED r2e_tests/test_1.py::Test_signed_deserialize::test_invalid_len\nPASSED r2e_tests/test_1.py::Test_signed_deserialize::test_it\nPASSED r2e_tests/test_1.py::Test_signed_deserialize::test_it_bad_encoding\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_directory\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_directory_with_file\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_directory_with_package\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_file_with_directory\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_file_with_file\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_file_with_package\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_package_with_directory\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_package_with_package\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_samename\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_filename_override_returns_value\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_stream_no_overrides\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_stream_override_returns_None\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_stream_override_returns_value\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_string_no_overrides\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_string_override_returns_None\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_string_override_returns_value\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_has_resource_no_overrides\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_has_resource_override_returns_None\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_has_resource_override_returns_True\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_resource_isdir_no_overrides\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_resource_isdir_override_returns_False\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_resource_isdir_override_returns_None\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_resource_listdir_no_overrides\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_resource_listdir_override_returns_None\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_resource_listdir_override_returns_values\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_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_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_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::TestPackageOverrides::test_search_path\nPASSED r2e_tests/test_config/test_assets.py::TestDirectoryOverride::test_it_match\nPASSED r2e_tests/test_config/test_assets.py::TestDirectoryOverride::test_it_no_match\nPASSED r2e_tests/test_config/test_assets.py::TestFileOverride::test_it_match\nPASSED r2e_tests/test_config/test_assets.py::TestFileOverride::test_it_no_match\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_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_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_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_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_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::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_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_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_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_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_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_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_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_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::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_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_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_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_show_scaffolds_exist\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_run_show_scaffolds_none_exist\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_unknown_scaffold_name\nPASSED r2e_tests/test_scripts/test_pcreate.py::Test_main::test_it\nPASSED r2e_tests/test_scripts/test_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_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_good_args\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_no_mapper\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_no_routes\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_route_with_no_slash_prefix\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_single_route_no_route_registered\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_single_route_no_views_registered\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_single_route_one_view_registered\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_single_route_one_view_registered_with_factory\nPASSED r2e_tests/test_scripts/test_proutes.py::Test_main::test_it\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_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_v0_10\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_loads_ipython_v0_11\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_loads_ipython_v1_1\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_loads_setup_from_options\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_setup\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_make_bpython_shell\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_make_default_shell\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_make_ipython_v0_10_shell\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_make_ipython_v0_11_shell\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_make_ipython_v1_1_shell\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_shell_ipython_ordering\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_shell_ordering\nPASSED r2e_tests/test_scripts/test_pshell.py::Test_main::test_it\nPASSED r2e_tests/test_scripts/test_ptweens.py::TestPTweensCommand::test__get_tweens\nPASSED r2e_tests/test_scripts/test_ptweens.py::TestPTweensCommand::test_command_implicit_and_explicit_tweens\nPASSED r2e_tests/test_scripts/test_ptweens.py::TestPTweensCommand::test_command_implicit_tweens_only\nPASSED r2e_tests/test_scripts/test_ptweens.py::TestPTweensCommand::test_command_no_tweens\nPASSED r2e_tests/test_scripts/test_ptweens.py::Test_main::test_it\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_multi_routes_all_match\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_multi_routes_none_match\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_multi_routes_some_match\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_view_no_match\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_view_no_match_multiview_registered\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_view_route_multiview\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_view_route_multiview_no_view_registered\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_view_route_no_multiview\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_view_traversal\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_view_traversal_multiview\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_multi_view_nested\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_multiview\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_multiview_with_permission\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_multiview_with_predicates\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_not_found\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_not_found_url_starts_without_slash\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_single_view_route\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_single_view_route_with_route_predicates\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_single_view_traversal\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_single_view_traversal_with_permission\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_single_view_traversal_with_predicates\nPASSED r2e_tests/test_scripts/test_pviews.py::Test_main::test_it\nFAILED r2e_tests/test_1.py::Test_check_csrf_token::test_failure_no_raises - V...\nFAILED r2e_tests/test_1.py::Test_check_csrf_token::test_failure_raises - Valu...\nFAILED r2e_tests/test_1.py::Test_check_csrf_token::test_success_default_header\nFAILED r2e_tests/test_1.py::Test_check_csrf_token::test_success_default_token\nFAILED r2e_tests/test_1.py::Test_check_csrf_token::test_success_header - Valu...\nFAILED r2e_tests/test_1.py::Test_check_csrf_token::test_success_token - Value...\nFAILED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_resource_url_adapter_dotted_names\nFAILED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_resource_url_adapter_introspectables\nFAILED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_traverser_dotted_names\nFAILED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_filename_no_overrides\nFAILED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_filename_override_returns_None\nFAILED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_get_filename\nFAILED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_add_translation_dirs_abspath\nFAILED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_add_translation_dirs_asset_spec\nFAILED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_add_translation_dirs_asset_spec_existing_translation_dirs\nFAILED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_add_translation_dirs_multiple_specs\nFAILED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_add_translation_dirs_multiple_specs_multiple_calls\nFAILED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_no_registry\nFAILED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_noreg_debug_logger_None_default\nFAILED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_scan_integration_conflict\nFAILED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_debug_logger_None_default\nFAILED r2e_tests/test_config/test_init.py::TestConfigurator_add_directive::test_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_custom_predicate_bests_standard_predicate\nFAILED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_custom_predicates_match\nFAILED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_custom_predicates_nomatch\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_pviews.py::TestPViewsCommand::test_views_command_single_view_function_traversal\n======================== 53 failed, 919 passed in 5.37s ========================\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_551e8c69a90883072b905c5b2eb19fd50fa53535\ncollected 972 items\n\nr2e_tests/test_1.py .........F.................F....F.........F......... [  5%]\n.............F......F..........F......................F.........FFFFFF   [ 12%]\nr2e_tests/test_config/test_adapters.py .FF..............F...             [ 14%]\nr2e_tests/test_config/test_assets.py ...........FF...................... [ 18%]\n.....F..........................                                         [ 21%]\nr2e_tests/test_config/test_factories.py ..................               [ 23%]\nr2e_tests/test_config/test_i18n.py FFF.FF...                             [ 24%]\nr2e_tests/test_config/test_init.py ..................................... [ 28%]\n.F..F....................F...........F....................FF...FFF...... [ 35%]\n..............                                                           [ 37%]\nr2e_tests/test_config/test_predicates.py ............................... [ 40%]\n........................................                                 [ 44%]\nr2e_tests/test_config/test_rendering.py ...                              [ 44%]\nr2e_tests/test_config/test_routes.py ........................            [ 47%]\nr2e_tests/test_config/test_security.py ..........                        [ 48%]\nr2e_tests/test_config/test_settings.py .......................           [ 50%]\nr2e_tests/test_config/test_testing.py ............                       [ 51%]\nr2e_tests/test_config/test_tweens.py .................................   [ 55%]\nr2e_tests/test_config/test_util.py ..................................... [ 58%]\n.............                                                            [ 60%]\nr2e_tests/test_config/test_views.py .....................F............F. [ 63%]\n..................................FF.................................... [ 71%]\n..FF.................................................................... [ 78%]\n.....FF.........F...F....F.............................................. [ 86%]\n..............F                                                          [ 87%]\nr2e_tests/test_scripts/test_common.py ...                                [ 88%]\nr2e_tests/test_scripts/test_pcreate.py ..........                        [ 89%]\nr2e_tests/test_scripts/test_pdistreport.py ..                            [ 89%]\nr2e_tests/test_scripts/test_prequest.py F.FFFFFFFFF.F.FFF.               [ 91%]\nr2e_tests/test_scripts/test_proutes.py ...........                       [ 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__________ TestBaseCookieSession.test_ctor_with_bad_cookie_not_tuple ___________\n\nself = <r2e_tests.test_1.TestBaseCookieSession testMethod=test_ctor_with_bad_cookie_not_tuple>\n\n    def test_ctor_with_bad_cookie_not_tuple(self):\n        request = testing.DummyRequest()\n        cookieval = self._serialize('abc')\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request)\n>       self.assertEqual(dict(session), {})\n\nr2e_tests/test_1.py:45: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nsession = {}, arg = (), kw = {}, now = 1737084559\n\n    def accessed(session, *arg, **kw):\n        session.accessed = now = int(time.time())\n>       if now - session.renewed > session._reissue_time:\nE       TypeError: unsupported operand type(s) for -: 'int' and 'str'\n\npyramid/session.py:30: TypeError\n___________________ TestBaseCookieSession.test_reissue_never ___________________\n\nself = <r2e_tests.test_1.TestBaseCookieSession testMethod=test_reissue_never>\n\n    def test_reissue_never(self):\n        request = testing.DummyRequest()\n        cookieval = self._serialize((0, 0, {'state': 1}))\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, reissue_time=None, timeout=None)\n>       self.assertEqual(session['state'], 1)\n\nr2e_tests/test_1.py:296: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nsession = {}, arg = ('state',), kw = {}, now = 1737084559\n\n    def accessed(session, *arg, **kw):\n        session.accessed = now = int(time.time())\n>       if now - session.renewed > session._reissue_time:\nE       TypeError: '>' not supported between instances of 'int' and 'NoneType'\n\npyramid/session.py:30: TypeError\n___________________ TestBaseCookieSession.test_timeout_never ___________________\n\nself = <r2e_tests.test_1.TestBaseCookieSession testMethod=test_timeout_never>\n\n    def test_timeout_never(self):\n        import time\n        request = testing.DummyRequest()\n        LONG_TIME = 31536000\n        cookieval = self._serialize((time.time() + LONG_TIME, 0, {'state': 1}))\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, timeout=None)\n>       self.assertEqual(dict(session), {'state': 1})\nE       AssertionError: {} != {'state': 1}\nE       - {}\nE       + {'state': 1}\n\nr2e_tests/test_1.py:62: AssertionError\n_________ TestSignedCookieSession.test_ctor_with_bad_cookie_not_tuple __________\n\nself = <r2e_tests.test_1.TestSignedCookieSession testMethod=test_ctor_with_bad_cookie_not_tuple>\n\n    def test_ctor_with_bad_cookie_not_tuple(self):\n        request = testing.DummyRequest()\n        cookieval = self._serialize('abc')\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request)\n>       self.assertEqual(dict(session), {})\n\nr2e_tests/test_1.py:45: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nsession = {}, arg = (), kw = {}, now = 1737084559\n\n    def accessed(session, *arg, **kw):\n        session.accessed = now = int(time.time())\n>       if now - session.renewed > session._reissue_time:\nE       TypeError: unsupported operand type(s) for -: 'int' and 'str'\n\npyramid/session.py:30: TypeError\n__________________ TestSignedCookieSession.test_reissue_never __________________\n\nself = <r2e_tests.test_1.TestSignedCookieSession testMethod=test_reissue_never>\n\n    def test_reissue_never(self):\n        request = testing.DummyRequest()\n        cookieval = self._serialize((0, 0, {'state': 1}))\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, reissue_time=None, timeout=None)\n>       self.assertEqual(session['state'], 1)\n\nr2e_tests/test_1.py:330: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nsession = {}, arg = ('state',), kw = {}, now = 1737084559\n\n    def accessed(session, *arg, **kw):\n        session.accessed = now = int(time.time())\n>       if now - session.renewed > session._reissue_time:\nE       TypeError: '>' not supported between instances of 'int' and 'NoneType'\n\npyramid/session.py:30: TypeError\n__________________ TestSignedCookieSession.test_timeout_never __________________\n\nself = <r2e_tests.test_1.TestSignedCookieSession testMethod=test_timeout_never>\n\n    def test_timeout_never(self):\n        import time\n        request = testing.DummyRequest()\n        LONG_TIME = 31536000\n        cookieval = self._serialize((time.time() + LONG_TIME, 0, {'state': 1}))\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, timeout=None)\n>       self.assertEqual(dict(session), {'state': 1})\nE       AssertionError: {} != {'state': 1}\nE       - {}\nE       + {'state': 1}\n\nr2e_tests/test_1.py:62: AssertionError\n_______ TestUnencryptedCookieSession.test_ctor_with_bad_cookie_not_tuple _______\n\nself = <r2e_tests.test_1.TestUnencryptedCookieSession testMethod=test_ctor_with_bad_cookie_not_tuple>\n\n    def test_ctor_with_bad_cookie_not_tuple(self):\n        request = testing.DummyRequest()\n        cookieval = self._serialize('abc')\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request)\n>       self.assertEqual(dict(session), {})\n\nr2e_tests/test_1.py:45: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nsession = {}, arg = (), kw = {}, now = 1737084560\n\n    def accessed(session, *arg, **kw):\n        session.accessed = now = int(time.time())\n>       if now - session.renewed > session._reissue_time:\nE       TypeError: unsupported operand type(s) for -: 'int' and 'str'\n\npyramid/session.py:30: TypeError\n_______________ TestUnencryptedCookieSession.test_timeout_never ________________\n\nself = <r2e_tests.test_1.TestUnencryptedCookieSession testMethod=test_timeout_never>\n\n    def test_timeout_never(self):\n        import time\n        request = testing.DummyRequest()\n        LONG_TIME = 31536000\n        cookieval = self._serialize((time.time() + LONG_TIME, 0, {'state': 1}))\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, timeout=None)\n>       self.assertEqual(dict(session), {'state': 1})\nE       AssertionError: {} != {'state': 1}\nE       - {}\nE       + {'state': 1}\n\nr2e_tests/test_1.py:62: AssertionError\n_________________ Test_check_csrf_token.test_failure_no_raises _________________\n\nself = <r2e_tests.test_1.Test_check_csrf_token testMethod=test_failure_no_raises>\n\n    def test_failure_no_raises(self):\n        request = testing.DummyRequest()\n>       result = self._callFUT(request, 'csrf_token', raises=False)\n\nr2e_tests/test_1.py:623: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = <r2e_tests.test_1.Test_check_csrf_token testMethod=test_failure_no_raises>\nargs = (<pyramid.testing.DummyRequest object at 0x74cc8d3c2b80>, 'csrf_token')\nkwargs = {'raises': False}\n\n    def _callFUT(self, *args, **kwargs):\n>       from ..session import check_csrf_token\nE       ValueError: attempted relative import beyond top-level package\n\nr2e_tests/test_1.py:592: ValueError\n__________________ Test_check_csrf_token.test_failure_raises ___________________\n\nself = <r2e_tests.test_1.Test_check_csrf_token testMethod=test_failure_raises>\n\n    def test_failure_raises(self):\n        from pyramid.exceptions import BadCSRFToken\n        request = testing.DummyRequest()\n>       self.assertRaises(BadCSRFToken, self._callFUT, request,\n                          'csrf_token')\n\nr2e_tests/test_1.py:618: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\n    def _callFUT(self, *args, **kwargs):\n>       from ..session import check_csrf_token\nE       ValueError: attempted relative import beyond top-level package\n\nr2e_tests/test_1.py:592: ValueError\n______________ Test_check_csrf_token.test_success_default_header _______________\n\nself = <r2e_tests.test_1.Test_check_csrf_token testMethod=test_success_default_header>\n\n    def test_success_default_header(self):\n        request = testing.DummyRequest()\n        request.headers['X-CSRF-Token'] = request.session.get_csrf_token()\n>       self.assertEqual(self._callFUT(request), True)\n\nr2e_tests/test_1.py:613: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = <r2e_tests.test_1.Test_check_csrf_token testMethod=test_success_default_header>\nargs = (<pyramid.testing.DummyRequest object at 0x74cc8d4ab730>,), kwargs = {}\n\n    def _callFUT(self, *args, **kwargs):\n>       from ..session import check_csrf_token\nE       ValueError: attempted relative import beyond top-level package\n\nr2e_tests/test_1.py:592: ValueError\n_______________ Test_check_csrf_token.test_success_default_token _______________\n\nself = <r2e_tests.test_1.Test_check_csrf_token testMethod=test_success_default_token>\n\n    def test_success_default_token(self):\n        request = testing.DummyRequest()\n        request.params['csrf_token'] = request.session.get_csrf_token()\n>       self.assertEqual(self._callFUT(request), True)\n\nr2e_tests/test_1.py:608: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = <r2e_tests.test_1.Test_check_csrf_token testMethod=test_success_default_token>\nargs = (<pyramid.testing.DummyRequest object at 0x74cc8e152970>,), kwargs = {}\n\n    def _callFUT(self, *args, **kwargs):\n>       from ..session import check_csrf_token\nE       ValueError: attempted relative import beyond top-level package\n\nr2e_tests/test_1.py:592: ValueError\n__________________ Test_check_csrf_token.test_success_header ___________________\n\nself = <r2e_tests.test_1.Test_check_csrf_token testMethod=test_success_header>\n\n    def test_success_header(self):\n        request = testing.DummyRequest()\n        request.headers['X-CSRF-Token'] = request.session.get_csrf_token()\n>       self.assertEqual(self._callFUT(request, header='X-CSRF-Token'), True)\n\nr2e_tests/test_1.py:603: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = <r2e_tests.test_1.Test_check_csrf_token testMethod=test_success_header>\nargs = (<pyramid.testing.DummyRequest object at 0x74cc8d41e310>,)\nkwargs = {'header': 'X-CSRF-Token'}\n\n    def _callFUT(self, *args, **kwargs):\n>       from ..session import check_csrf_token\nE       ValueError: attempted relative import beyond top-level package\n\nr2e_tests/test_1.py:592: ValueError\n___________________ Test_check_csrf_token.test_success_token ___________________\n\nself = <r2e_tests.test_1.Test_check_csrf_token testMethod=test_success_token>\n\n    def test_success_token(self):\n        request = testing.DummyRequest()\n        request.params['csrf_token'] = request.session.get_csrf_token()\n>       self.assertEqual(self._callFUT(request, token='csrf_token'), True)\n\nr2e_tests/test_1.py:598: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = <r2e_tests.test_1.Test_check_csrf_token testMethod=test_success_token>\nargs = (<pyramid.testing.DummyRequest object at 0x74cc8d3ec730>,)\nkwargs = {'token': 'csrf_token'}\n\n    def _callFUT(self, *args, **kwargs):\n>       from ..session import check_csrf_token\nE       ValueError: attempted relative import beyond top-level package\n\nr2e_tests/test_1.py:592: 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 0x74cc8d9c7e50>, <r2e_tests.test_config.test_adapters.DummyIface object at 0x74cc8d9c7e50>)\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 0x74cc8d9c7e50>, <r2e_tests.test_config.test_adapters.DummyIface object at 0x74cc8d9c7e50>), <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 0x74cc8d43a490>\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 0x74cc8d43a490>, <InterfaceClass pyramid.interfaces.ITraverser>, '')\n\n.venv/lib/python3.8/site-packages/zope/interface/registry.py:368: ComponentLookupError\n_________ TestOverrideProvider.test_get_resource_filename_no_overrides _________\n\nself = <r2e_tests.test_config.test_assets.TestOverrideProvider testMethod=test_get_resource_filename_no_overrides>\n\n    def test_get_resource_filename_no_overrides(self):\n        import os\n        resource_name = 'test_assets.py'\n        import pyramid.tests.test_config\n        provider = self._makeOne(pyramid.tests.test_config)\n        here = os.path.dirname(os.path.abspath(__file__))\n        expected = os.path.join(here, resource_name)\n        result = provider.get_resource_filename(None, resource_name)\n>       self.assertEqual(result, expected)\nE       AssertionError: '/hom[73 chars]05c5b2eb19fd50fa53535/pyramid/tests/test_config/test_assets.py' != '/hom[73 chars]05c5b2eb19fd50fa53535/r2e_tests/test_config/test_assets.py'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_551e8c69a90883072b905c5b2eb19fd50fa53535/pyramid/tests/test_config/test_assets.py\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_551e8c69a90883072b905c5b2eb19fd50fa53535/r2e_tests/test_config/test_assets.py\nE       ?                                                                                                     ^^^\n\nr2e_tests/test_config/test_assets.py:158: AssertionError\n____ TestOverrideProvider.test_get_resource_filename_override_returns_None _____\n\nself = <r2e_tests.test_config.test_assets.TestOverrideProvider testMethod=test_get_resource_filename_override_returns_None>\n\n    def test_get_resource_filename_override_returns_None(self):\n        overrides = DummyOverrides(None)\n        self._registerOverrides(overrides)\n        import os\n        resource_name = 'test_assets.py'\n        import pyramid.tests.test_config\n        provider = self._makeOne(pyramid.tests.test_config)\n        here = os.path.dirname(os.path.abspath(__file__))\n        expected = os.path.join(here, resource_name)\n        result = provider.get_resource_filename(None, resource_name)\n>       self.assertEqual(result, expected)\nE       AssertionError: '/hom[73 chars]05c5b2eb19fd50fa53535/pyramid/tests/test_config/test_assets.py' != '/hom[73 chars]05c5b2eb19fd50fa53535/r2e_tests/test_config/test_assets.py'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_551e8c69a90883072b905c5b2eb19fd50fa53535/pyramid/tests/test_config/test_assets.py\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_551e8c69a90883072b905c5b2eb19fd50fa53535/r2e_tests/test_config/test_assets.py\nE       ?                                                                                                     ^^^\n\nr2e_tests/test_config/test_assets.py:212: AssertionError\n____________________ TestPackageOverrides.test_get_filename ____________________\n\nself = <r2e_tests.test_config.test_assets.TestPackageOverrides testMethod=test_get_filename>\n\n    def test_get_filename(self):\n        import os\n        overrides = [ DummyOverride(None), DummyOverride(\n            ('pyramid.tests.test_config', 'test_assets.py'))]\n        package = DummyPackage('package')\n        po = self._makeOne(package)\n        po.overrides= overrides\n        here = os.path.dirname(os.path.abspath(__file__))\n        expected = os.path.join(here, 'test_assets.py')\n>       self.assertEqual(po.get_filename('whatever'), expected)\nE       AssertionError: '/hom[73 chars]05c5b2eb19fd50fa53535/pyramid/tests/test_config/test_assets.py' != '/hom[73 chars]05c5b2eb19fd50fa53535/r2e_tests/test_config/test_assets.py'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_551e8c69a90883072b905c5b2eb19fd50fa53535/pyramid/tests/test_config/test_assets.py\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_551e8c69a90883072b905c5b2eb19fd50fa53535/r2e_tests/test_config/test_assets.py\nE       ?                                                                                                     ^^^\n\nr2e_tests/test_config/test_assets.py:425: 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:528: in wrapper\n    result = wrapped(self, *arg, **kw)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = <pyramid.config.Configurator object at 0x74cc8d8ac2e0>\nspecs = ('/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_551e8c69a90883072b905c5b2eb19fd50fa53535/r2e_tests/pkgs/localeapp/locale',)\nintrospectables = []\nspec = '/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_551e8c69a90883072b905c5b2eb19fd50fa53535/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_551e8c69a90883072b905c5b2eb19fd50fa53535/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]72b905c5b2eb19fd50fa53535/pyramid/tests/pkgs/localeapp/locale'] != ['/ho[70 chars]72b905c5b2eb19fd50fa53535/r2e_tests/pkgs/localeapp/locale']\nE       \nE       First differing element 0:\nE       '/hom[68 chars]072b905c5b2eb19fd50fa53535/pyramid/tests/pkgs/localeapp/locale'\nE       '/hom[68 chars]072b905c5b2eb19fd50fa53535/r2e_tests/pkgs/localeapp/locale'\nE       \nE       - ['/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_551e8c69a90883072b905c5b2eb19fd50fa53535/pyramid/tests/pkgs/localeapp/locale']\nE       ?                                                                                                      -- ^^^^^\nE       \nE       + ['/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_551e8c69a90883072b905c5b2eb19fd50fa53535/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]5b2eb19fd50fa53535/pyramid/tests/pkgs/localeapp/locale', 'abc'] != ['/ho[77 chars]5b2eb19fd50fa53535/r2e_tests/pkgs/localeapp/locale', 'abc']\nE       \nE       First differing element 0:\nE       '/hom[68 chars]072b905c5b2eb19fd50fa53535/pyramid/tests/pkgs/localeapp/locale'\nE       '/hom[68 chars]072b905c5b2eb19fd50fa53535/r2e_tests/pkgs/localeapp/locale'\nE       \nE       - ['/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_551e8c69a90883072b905c5b2eb19fd50fa53535/pyramid/tests/pkgs/localeapp/locale',\nE       ?                                                                                                      -- ^^^^^\nE       \nE       + ['/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_551e8c69a90883072b905c5b2eb19fd50fa53535/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]3535/pyramid/tests/pkgs/localeapp/locale', '/h[130 chars]le2'] != ['/ho[91 chars]3535/r2e_tests/pkgs/localeapp/locale', '/home/[122 chars]le2']\nE       \nE       First differing element 0:\nE       '/hom[68 chars]072b905c5b2eb19fd50fa53535/pyramid/tests/pkgs/localeapp/locale'\nE       '/hom[68 chars]072b905c5b2eb19fd50fa53535/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]3535/pyramid/tests/pkgs/localeapp/locale3', '/[269 chars]le2'] != ['/ho[91 chars]3535/r2e_tests/pkgs/localeapp/locale3', '/home[257 chars]le2']\nE       \nE       First differing element 0:\nE       '/hom[69 chars]72b905c5b2eb19fd50fa53535/pyramid/tests/pkgs/localeapp/locale3'\nE       '/hom[69 chars]72b905c5b2eb19fd50fa53535/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:67: 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:123: 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:999: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \npyramid/config/__init__.py:609: in commit\n    self.action_state.execute_actions(introspector=self.introspector)\npyramid/config/__init__.py:1047: in execute_actions\n    for action in resolveConflicts(self.actions):\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nactions = []\n\n    def resolveConflicts(actions):\n        \"\"\"Resolve conflicting actions\n    \n        Given an actions list, identify and try to resolve conflicting actions.\n        Actions conflict if they have the same non-None discriminator.\n        Conflicting actions can be resolved if the include path of one of\n        the actions is a prefix of the includepaths of the other\n        conflicting actions and is unequal to the include paths in the\n        other conflicting actions.\n        \"\"\"\n    \n        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 # not a prefix\n                        or includepath == basepath):\n                        L = conflicts.setdefault(discriminator, [baseinfo])\n                        L.append(action['info'])\n    \n            if conflicts:\n>               raise ConfigurationConflictError(conflicts)\nE               pyramid.exceptions.ConfigurationConflictError: Conflicting configuration actions\nE                 For: ('view', None, '', None, 'd41d8cd98f00b204e9800998ecf8427e')\nE                   Line 4 of file /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_551e8c69a90883072b905c5b2eb19fd50fa53535/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_551e8c69a90883072b905c5b2eb19fd50fa53535/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_551e8c69a90883072b905c5b2eb19fd50fa53535/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_551e8c69a90883072b905c5b2eb19fd50fa53535/pyramid/tests/test_config/pkgs/selfscan/another.py:\nE                       def two(request):\n\npyramid/config/__init__.py:1175: 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:1008: 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:428: 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:1207: 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:1194: 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:1181: 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:1220: 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:1284: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \npyramid/config/__init__.py:498: in _add_predicate\n    self.action(discriminator, register, introspectables=(intr,),\nr2e_tests/test_config/test_init.py:1281: 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]4cc8d0c1a90>, 'static', 'r2e_tests.test_config:files', {})] != [(<py[39 chars]4cc8d0c1a90>, 'static', 'pyramid.tests.test_config:files', {})]\nE       \nE       First differing element 0:\nE       (<pyr[37 chars]74cc8d0c1a90>, 'static', 'r2e_tests.test_config:files', {})\nE       (<pyr[37 chars]74cc8d0c1a90>, 'static', 'pyramid.tests.test_config:files', {})\nE       \nE         [(<pyramid.config.Configurator object at 0x74cc8d0c1a90>,\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:1755: AssertionError\n_ TestViewsConfigurationMixin.test_add_view_custom_predicate_bests_standard_predicate _\n\nself = <r2e_tests.test_config.test_views.TestViewsConfigurationMixin testMethod=test_add_view_custom_predicate_bests_standard_predicate>\n\n    def test_add_view_custom_predicate_bests_standard_predicate(self):\n        import warnings\n        from pyramid.renderers import null_renderer\n        view = lambda *arg: 'OK'\n        view2 = lambda *arg: 'NOT OK'\n        config = self._makeOne(autocommit=True)\n        def pred1(context, request):\n            return True\n        with warnings.catch_warnings(record=True) as w:\n            warnings.filterwarnings('always')\n            config.add_view(view=view, custom_predicates=(pred1,),\n                        renderer=null_renderer)\n            config.add_view(view=view2, request_method='GET',\n                            renderer=null_renderer)\n>           self.assertEqual(len(w), 1)\nE           AssertionError: 3 != 1\n\nr2e_tests/test_config/test_views.py:1471: AssertionError\n____ TestViewsConfigurationMixin.test_add_view_with_custom_predicates_match ____\n\nself = <r2e_tests.test_config.test_views.TestViewsConfigurationMixin testMethod=test_add_view_with_custom_predicates_match>\n\n    def test_add_view_with_custom_predicates_match(self):\n        import warnings\n        from pyramid.renderers import null_renderer\n        view = lambda *arg: 'OK'\n        config = self._makeOne(autocommit=True)\n        def pred1(context, request):\n            return True\n        def pred2(context, request):\n            return True\n        predicates = (pred1, pred2)\n        with warnings.catch_warnings(record=True) as w:\n            warnings.filterwarnings('always')\n            config.add_view(view=view, custom_predicates=predicates,\n                            renderer=null_renderer)\n>           self.assertEqual(len(w), 1)\nE           AssertionError: 2 != 1\n\nr2e_tests/test_config/test_views.py:1435: AssertionError\n___ TestViewsConfigurationMixin.test_add_view_with_custom_predicates_nomatch ___\n\nself = <r2e_tests.test_config.test_views.TestViewsConfigurationMixin testMethod=test_add_view_with_custom_predicates_nomatch>\n\n    def test_add_view_with_custom_predicates_nomatch(self):\n        import warnings\n        view = lambda *arg: 'OK'\n        config = self._makeOne(autocommit=True)\n        def pred1(context, request):\n            return True\n        def pred2(context, request):\n            return False\n        predicates = (pred1, pred2)\n        with warnings.catch_warnings(record=True) as w:\n            warnings.filterwarnings('always')\n            config.add_view(view=view, custom_predicates=predicates)\n>           self.assertEqual(len(w), 1)\nE           AssertionError: 2 != 1\n\nr2e_tests/test_config/test_views.py:1452: 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:1070: 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:1111: 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:2366: \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:404: 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:2368: 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:2385: \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:404: 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:2387: 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:2406: \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 0x74cc8d627940> 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:404: 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:2409: 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:2452: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\ncontext = None\nrequest = <r2e_tests.test_config.test_views.DummyRequest object at 0x74cc8d0c2700>\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:404: 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:2454: 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:2476: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\ncontext = None\nrequest = <r2e_tests.test_config.test_views.DummyRequest object at 0x74cc8d0b2a30>\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:404: 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:2478: 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:3937: 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_____ 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::TestBaseCookieSession::test__set_cookie_cookieval_too_long\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test__set_cookie_on_exception\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test__set_cookie_on_exception_no_request_exception\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test__set_cookie_options\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test__set_cookie_real_webob_response\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test_changed\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test_cookie_is_set\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test_ctor_no_cookie\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test_ctor_with_bad_cookie_cannot_deserialize\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test_ctor_with_cookie_expired\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test_ctor_with_cookie_still_valid\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test_flash_allow_duplicate_false\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test_flash_allow_duplicate_false_and_msg_not_in_storage\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test_flash_allow_duplicate_true_and_msg_not_in_storage\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test_flash_default\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test_flash_mixed\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test_get_csrf_token\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test_get_csrf_token_new\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test_instance_conforms\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test_invalidate\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test_new_csrf_token\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test_no_set_cookie_with_exception\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test_peek_flash_default_queue\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test_peek_flash_nodefault_queue\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test_pop_flash_default_queue\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test_pop_flash_nodefault_queue\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test_reissue_not_triggered\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test_reissue_triggered\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test_set_cookie_with_exception\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test_timeout\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test__set_cookie_cookieval_too_long\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test__set_cookie_on_exception\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test__set_cookie_on_exception_no_request_exception\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test__set_cookie_options\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test__set_cookie_real_webob_response\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_changed\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_cookie_is_set\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_ctor_no_cookie\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_ctor_with_bad_cookie_cannot_deserialize\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_ctor_with_cookie_expired\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_ctor_with_cookie_still_valid\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_custom_hashalg\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_custom_salt\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_custom_serializer\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_flash_allow_duplicate_false\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_flash_allow_duplicate_false_and_msg_not_in_storage\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_flash_allow_duplicate_true_and_msg_not_in_storage\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_flash_default\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_flash_mixed\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_get_csrf_token\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_get_csrf_token_new\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_hashalg_mismatch\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_instance_conforms\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_invalid_data_size\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_invalidate\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_new_csrf_token\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_no_set_cookie_with_exception\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_peek_flash_default_queue\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_peek_flash_nodefault_queue\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_pop_flash_default_queue\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_pop_flash_nodefault_queue\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_reissue_not_triggered\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_reissue_triggered\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_salt_mismatch\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_secret_mismatch\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_set_cookie_with_exception\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_timeout\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_very_long_key\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test__set_cookie_cookieval_too_long\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test__set_cookie_on_exception\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test__set_cookie_on_exception_no_request_exception\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test__set_cookie_options\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test__set_cookie_real_webob_response\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test_changed\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test_cookie_is_set\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test_ctor_no_cookie\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test_ctor_with_bad_cookie_cannot_deserialize\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test_ctor_with_cookie_expired\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test_ctor_with_cookie_still_valid\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test_deserialize_option\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test_flash_allow_duplicate_false\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test_flash_allow_duplicate_false_and_msg_not_in_storage\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test_flash_allow_duplicate_true_and_msg_not_in_storage\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test_flash_default\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test_flash_mixed\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test_get_csrf_token\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test_get_csrf_token_new\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test_instance_conforms\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test_invalidate\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test_new_csrf_token\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test_no_set_cookie_with_exception\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test_peek_flash_default_queue\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test_peek_flash_nodefault_queue\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test_pop_flash_default_queue\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test_pop_flash_nodefault_queue\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test_reissue_triggered\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test_serialize_option\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test_set_cookie_with_exception\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test_timeout\nPASSED r2e_tests/test_1.py::Test_manage_accessed::test_accessed_set\nPASSED r2e_tests/test_1.py::Test_manage_accessed::test_accessed_without_renew\nPASSED r2e_tests/test_1.py::Test_manage_accessed::test_already_dirty\nPASSED r2e_tests/test_1.py::Test_manage_changed::test_it\nPASSED r2e_tests/test_1.py::Test_signed_serialize::test_it\nPASSED r2e_tests/test_1.py::Test_signed_deserialize::test_invalid_bits\nPASSED r2e_tests/test_1.py::Test_signed_deserialize::test_invalid_len\nPASSED r2e_tests/test_1.py::Test_signed_deserialize::test_it\nPASSED r2e_tests/test_1.py::Test_signed_deserialize::test_it_bad_encoding\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_directory\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_directory_with_file\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_directory_with_package\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_file_with_directory\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_file_with_file\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_file_with_package\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_package_with_directory\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_package_with_package\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_samename\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_filename_override_returns_value\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_stream_no_overrides\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_stream_override_returns_None\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_stream_override_returns_value\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_string_no_overrides\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_string_override_returns_None\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_string_override_returns_value\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_has_resource_no_overrides\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_has_resource_override_returns_None\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_has_resource_override_returns_True\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_resource_isdir_no_overrides\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_resource_isdir_override_returns_False\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_resource_isdir_override_returns_None\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_resource_listdir_no_overrides\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_resource_listdir_override_returns_None\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_resource_listdir_override_returns_values\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_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_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_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::TestPackageOverrides::test_search_path\nPASSED r2e_tests/test_config/test_assets.py::TestDirectoryOverride::test_it_match\nPASSED r2e_tests/test_config/test_assets.py::TestDirectoryOverride::test_it_no_match\nPASSED r2e_tests/test_config/test_assets.py::TestFileOverride::test_it_match\nPASSED r2e_tests/test_config/test_assets.py::TestFileOverride::test_it_no_match\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_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_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_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_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_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::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_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_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_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_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_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_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_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_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::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_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_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_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_show_scaffolds_exist\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_run_show_scaffolds_none_exist\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_unknown_scaffold_name\nPASSED r2e_tests/test_scripts/test_pcreate.py::Test_main::test_it\nPASSED r2e_tests/test_scripts/test_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_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_good_args\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_no_mapper\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_no_routes\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_route_with_no_slash_prefix\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_single_route_no_route_registered\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_single_route_no_views_registered\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_single_route_one_view_registered\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_single_route_one_view_registered_with_factory\nPASSED r2e_tests/test_scripts/test_proutes.py::Test_main::test_it\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_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_v0_10\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_loads_ipython_v0_11\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_loads_ipython_v1_1\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_loads_setup_from_options\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_setup\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_make_bpython_shell\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_make_default_shell\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_make_ipython_v0_10_shell\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_make_ipython_v0_11_shell\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_make_ipython_v1_1_shell\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_shell_ipython_ordering\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_shell_ordering\nPASSED r2e_tests/test_scripts/test_pshell.py::Test_main::test_it\nPASSED r2e_tests/test_scripts/test_ptweens.py::TestPTweensCommand::test__get_tweens\nPASSED r2e_tests/test_scripts/test_ptweens.py::TestPTweensCommand::test_command_implicit_and_explicit_tweens\nPASSED r2e_tests/test_scripts/test_ptweens.py::TestPTweensCommand::test_command_implicit_tweens_only\nPASSED r2e_tests/test_scripts/test_ptweens.py::TestPTweensCommand::test_command_no_tweens\nPASSED r2e_tests/test_scripts/test_ptweens.py::Test_main::test_it\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_multi_routes_all_match\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_multi_routes_none_match\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_multi_routes_some_match\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_view_no_match\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_view_no_match_multiview_registered\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_view_route_multiview\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_view_route_multiview_no_view_registered\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_view_route_no_multiview\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_view_traversal\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_view_traversal_multiview\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_multi_view_nested\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_multiview\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_multiview_with_permission\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_multiview_with_predicates\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_not_found\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_not_found_url_starts_without_slash\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_single_view_route\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_single_view_route_with_route_predicates\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_single_view_traversal\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_single_view_traversal_with_permission\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_single_view_traversal_with_predicates\nPASSED r2e_tests/test_scripts/test_pviews.py::Test_main::test_it\nFAILED r2e_tests/test_1.py::TestBaseCookieSession::test_ctor_with_bad_cookie_not_tuple\nFAILED r2e_tests/test_1.py::TestBaseCookieSession::test_reissue_never - TypeE...\nFAILED r2e_tests/test_1.py::TestBaseCookieSession::test_timeout_never - Asser...\nFAILED r2e_tests/test_1.py::TestSignedCookieSession::test_ctor_with_bad_cookie_not_tuple\nFAILED r2e_tests/test_1.py::TestSignedCookieSession::test_reissue_never - Typ...\nFAILED r2e_tests/test_1.py::TestSignedCookieSession::test_timeout_never - Ass...\nFAILED r2e_tests/test_1.py::TestUnencryptedCookieSession::test_ctor_with_bad_cookie_not_tuple\nFAILED r2e_tests/test_1.py::TestUnencryptedCookieSession::test_timeout_never\nFAILED r2e_tests/test_1.py::Test_check_csrf_token::test_failure_no_raises - V...\nFAILED r2e_tests/test_1.py::Test_check_csrf_token::test_failure_raises - Valu...\nFAILED r2e_tests/test_1.py::Test_check_csrf_token::test_success_default_header\nFAILED r2e_tests/test_1.py::Test_check_csrf_token::test_success_default_token\nFAILED r2e_tests/test_1.py::Test_check_csrf_token::test_success_header - Valu...\nFAILED r2e_tests/test_1.py::Test_check_csrf_token::test_success_token - Value...\nFAILED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_resource_url_adapter_dotted_names\nFAILED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_resource_url_adapter_introspectables\nFAILED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_traverser_dotted_names\nFAILED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_filename_no_overrides\nFAILED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_filename_override_returns_None\nFAILED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_get_filename\nFAILED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_add_translation_dirs_abspath\nFAILED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_add_translation_dirs_asset_spec\nFAILED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_add_translation_dirs_asset_spec_existing_translation_dirs\nFAILED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_add_translation_dirs_multiple_specs\nFAILED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_add_translation_dirs_multiple_specs_multiple_calls\nFAILED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_no_registry\nFAILED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_noreg_debug_logger_None_default\nFAILED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_scan_integration_conflict\nFAILED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_debug_logger_None_default\nFAILED r2e_tests/test_config/test_init.py::TestConfigurator_add_directive::test_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_custom_predicate_bests_standard_predicate\nFAILED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_custom_predicates_match\nFAILED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_custom_predicates_nomatch\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_pviews.py::TestPViewsCommand::test_views_command_single_view_function_traversal\n======================== 61 failed, 911 passed in 4.78s ========================\n",
    "old_commit_res_stderr": ""
}
pyramid/session.py pyramid/tests/test_session.py
We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
[ISSUE]
**Title:** TypeError Occurs When Session's `_reissue_time` Is `None` or Invalid

**Description:**
When managing session access, if the session's `_reissue_time` attribute is set to `None` or contains an invalid type (e.g., a string), the session handling logic attempts arithmetic operations that result in a `TypeError`. This prevents the session from functioning correctly and can lead to unexpected crashes.

**Example Code:**
```python
import time
from pyramid.session import BaseCookieSessionFactory
from pyramid.testing import DummyRequest

# Dummy serializer for demonstration
class DummySerializer:
    def loads(self, data):
        return data

    def dumps(self, obj):
        return obj

# Serialize function for the example
def serialize(value):
    import json
    return json.dumps(value)

# Create a session factory with _reissue_time set to None
serializer = DummySerializer()
factory = BaseCookieSessionFactory(serializer, reissue_time=None)
request = DummyRequest()
request.cookies['session'] = serialize((int(time.time()), 0, {'user_id': 123}))

# Attempt to access the session
session = factory(request)
user_id = session['user_id']
```

**Expected Behavior:**
The session should handle cases where `_reissue_time` is `None` without raising exceptions. It should allow access to session data seamlessly, maintaining the session state as expected.

**Actual Behavior:**
A `TypeError` is raised during session access because the code attempts to perform arithmetic operations between incompatible types (`int` and `NoneType` or `str`), as shown below:

```
TypeError: '>' not supported between instances of 'int' and 'NoneType'
```
or
```
TypeError: unsupported operand type(s) for -: 'int' and 'str'
```

This error disrupts the normal flow of the application and prevents proper session management.

[/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/session.py
import base64
import binascii
import hashlib
import hmac
import os
import time

from zope.deprecation import deprecated
from zope.interface import implementer

from webob.cookies import SignedSerializer

from pyramid.compat import (
    pickle,
    PY3,
    text_,
    bytes_,
    native_,
    )

from pyramid.exceptions import BadCSRFToken
from pyramid.interfaces import ISession
from pyramid.util import strings_differ

def manage_accessed(wrapped):
    """ Decorator which causes a cookie to be renewed when an accessor
    method is called."""
    def accessed(session, *arg, **kw):
        session.accessed = now = int(time.time())
        if now - session.renewed > session._reissue_time:
            session.changed()
        return wrapped(session, *arg, **kw)
    accessed.__doc__ = wrapped.__doc__
    return accessed

def manage_changed(wrapped):
    """ Decorator which causes a cookie to be set when a setter method
    is called."""
    def changed(session, *arg, **kw):
        session.accessed = int(time.time())
        session.changed()
        return wrapped(session, *arg, **kw)
    changed.__doc__ = wrapped.__doc__
    return changed

def signed_serialize(data, secret):
    """ Serialize any pickleable structure (``data``) and sign it
    using the ``secret`` (must be a string).  Return the
    serialization, which includes the signature as its first 40 bytes.
    The ``signed_deserialize`` method will deserialize such a value.

    This function is useful for creating signed cookies.  For example:

    .. code-block:: python

       cookieval = signed_serialize({'a':1}, 'secret')
       response.set_cookie('signed_cookie', cookieval)
    """
    pickled = pickle.dumps(data, pickle.HIGHEST_PROTOCOL)
    sig = hmac.new(bytes_(secret), pickled, hashlib.sha1).hexdigest()
    return sig + native_(base64.b64encode(pickled))

def signed_deserialize(serialized, secret, hmac=hmac):
    """ Deserialize the value returned from ``signed_serialize``.  If
    the value cannot be deserialized for any reason, a
    :exc:`ValueError` exception will be raised.

    This function is useful for deserializing a signed cookie value
    created by ``signed_serialize``.  For example:

    .. code-block:: python

       cookieval = request.cookies['signed_cookie']
       data = signed_deserialize(cookieval, 'secret')
    """
    # hmac parameterized only for unit tests
    try:
        input_sig, pickled = (bytes_(serialized[:40]),
                              base64.b64decode(bytes_(serialized[40:])))
    except (binascii.Error, TypeError) as e:
        # Badly formed data can make base64 die
        raise ValueError('Badly formed base64 data: %s' % e)

    sig = bytes_(hmac.new(bytes_(secret), pickled, hashlib.sha1).hexdigest())

    # Avoid timing attacks (see
    # http://seb.dbzteam.org/crypto/python-oauth-timing-hmac.pdf)
    if strings_differ(sig, input_sig):
        raise ValueError('Invalid signature')

    return pickle.loads(pickled)

def check_csrf_token(request,
                     token='csrf_token',
                     header='X-CSRF-Token',
                     raises=True):
    """ Check the CSRF token in the request's session against the value in
    ``request.params.get(token)`` or ``request.headers.get(header)``.
    If a ``token`` keyword is not supplied to this function, the string
    ``csrf_token`` will be used to look up the token in ``request.params``.
    If a ``header`` keyword is not supplied to this function, the string
    ``X-CSRF-Token`` will be used to look up the token in ``request.headers``.

    If the value supplied by param or by header doesn't match the value
    supplied by ``request.session.get_csrf_token()``, and ``raises`` is
    ``True``, this function will raise an
    :exc:`pyramid.exceptions.BadCSRFToken` exception.
    If the check does succeed and ``raises`` is ``False``, this
    function will return ``False``.  If the CSRF check is successful, this
    function will return ``True`` unconditionally.

    Note that using this function requires that a :term:`session factory` is
    configured.

    .. versionadded:: 1.4a2
    """
    supplied_token = request.params.get(token, request.headers.get(header))
    if supplied_token != request.session.get_csrf_token():
        if raises:
            raise BadCSRFToken('check_csrf_token(): Invalid token')
        return False
    return True

class PickleSerializer(object):
    """ A Webob cookie serializer that uses the pickle protocol to dump Python
    data to bytes."""
    def loads(self, bstruct):
        return pickle.loads(bstruct)

    def dumps(self, appstruct):
        return pickle.dumps(appstruct, pickle.HIGHEST_PROTOCOL)

def BaseCookieSessionFactory(
    serializer,
    cookie_name='session',
    max_age=None,
    path='/',
    domain=None,
    secure=False,
    httponly=False,
    timeout=1200,
    reissue_time=0,
    set_on_exception=True,
    ):
    """
    .. versionadded:: 1.5
    
    Configure a :term:`session factory` which will provide cookie-based
    sessions.  The return value of this function is a :term:`session factory`,
    which may be provided as the ``session_factory`` argument of a
    :class:`pyramid.config.Configurator` constructor, or used as the
    ``session_factory`` argument of the
    :meth:`pyramid.config.Configurator.set_session_factory` method.

    The session factory returned by this function will create sessions
    which are limited to storing fewer than 4000 bytes of data (as the
    payload must fit into a single cookie).

    .. warning:

       This class provides no protection from tampering and is only intended
       to be used by framework authors to create their own cookie-based
       session factories.

    Parameters:

    ``serializer``
      An object with two methods: ``loads`` and ``dumps``.  The ``loads`` method
      should accept bytes and return a Python object.  The ``dumps`` method
      should accept a Python object and return bytes.  A ``ValueError`` should
      be raised for malformed inputs.

    ``cookie_name``
      The name of the cookie used for sessioning. Default: ``'session'``.

    ``max_age``
      The maximum age of the cookie used for sessioning (in seconds).
      Default: ``None`` (browser scope).

    ``path``
      The path used for the session cookie. Default: ``'/'``.

    ``domain``
      The domain used for the session cookie.  Default: ``None`` (no domain).

    ``secure``
      The 'secure' flag of the session cookie. Default: ``False``.

    ``httponly``
      Hide the cookie from Javascript by setting the 'HttpOnly' flag of the
      session cookie. Default: ``False``.

    ``timeout``
      A number of seconds of inactivity before a session times out. If
      ``None`` then the cookie never expires. This lifetime only applies
      to the *value* within the cookie. Meaning that if the cookie expires
      due to a lower ``max_age``, then this setting has no effect.
      Default: ``1200``.

    ``reissue_time``
      The number of seconds that must pass before the cookie is automatically
      reissued as the result of a request which accesses the session. The
      duration is measured as the number of seconds since the last session
      cookie was issued and 'now'.  If this value is ``0``, a new cookie
      will be reissued on every request accessing the session. If ``None``
      then the cookie's lifetime will never be extended.

      A good rule of thumb: if you want auto-expired cookies based on
      inactivity: set the ``timeout`` value to 1200 (20 mins) and set the
      ``reissue_time`` value to perhaps a tenth of the ``timeout`` value
      (120 or 2 mins).  It's nonsensical to set the ``timeout`` value lower
      than the ``reissue_time`` value, as the ticket will never be reissued.
      However, such a configuration is not explicitly prevented.

      Default: ``0``.

    ``set_on_exception``
      If ``True``, set a session cookie even if an exception occurs
      while rendering a view. Default: ``True``.

    .. versionadded: 1.5a3
    """

    @implementer(ISession)
    class CookieSession(dict):
        """ Dictionary-like session object """

        # configuration parameters
        _cookie_name = cookie_name
        _cookie_max_age = max_age
        _cookie_path = path
        _cookie_domain = domain
        _cookie_secure = secure
        _cookie_httponly = httponly
        _cookie_on_exception = set_on_exception
        _timeout = timeout
        _reissue_time = reissue_time

        # dirty flag
        _dirty = False

        def __init__(self, request):
            self.request = request
            now = time.time()
            created = renewed = now
            new = True
            value = None
            state = {}
            cookieval = request.cookies.get(self._cookie_name)
            if cookieval is not None:
                try:
                    value = serializer.loads(bytes_(cookieval))
                except ValueError:
                    # the cookie failed to deserialize, dropped
                    value = None

            if value is not None:
                try:
                    renewed, created, state = value
                    new = False
                    if now - renewed > self._timeout:
                        # expire the session because it was not renewed
                        # before the timeout threshold
                        state = {}
                except TypeError:
                    # value failed to unpack properly or renewed was not
                    # a numeric type so we'll fail deserialization here
                    state = {}

            self.created = created
            self.accessed = renewed
            self.renewed = renewed
            self.new = new
            dict.__init__(self, state)

        # ISession methods
        def changed(self):
            if not self._dirty:
                self._dirty = True
                def set_cookie_callback(request, response):
                    self._set_cookie(response)
                    self.request = None # explicitly break cycle for gc
                self.request.add_response_callback(set_cookie_callback)

        def invalidate(self):
            self.clear() # XXX probably needs to unset cookie

        # non-modifying dictionary methods
        get = manage_accessed(dict.get)
        __getitem__ = manage_accessed(dict.__getitem__)
        items = manage_accessed(dict.items)
        values = manage_accessed(dict.values)
        keys = manage_accessed(dict.keys)
        __contains__ = manage_accessed(dict.__contains__)
        __len__ = manage_accessed(dict.__len__)
        __iter__ = manage_accessed(dict.__iter__)

        if not PY3:
            iteritems = manage_accessed(dict.iteritems)
            itervalues = manage_accessed(dict.itervalues)
            iterkeys = manage_accessed(dict.iterkeys)
            has_key = manage_accessed(dict.has_key)

        # modifying dictionary methods
        clear = manage_changed(dict.clear)
        update = manage_changed(dict.update)
        setdefault = manage_changed(dict.setdefault)
        pop = manage_changed(dict.pop)
        popitem = manage_changed(dict.popitem)
        __setitem__ = manage_changed(dict.__setitem__)
        __delitem__ = manage_changed(dict.__delitem__)

        # flash API methods
        @manage_changed
        def flash(self, msg, queue='', allow_duplicate=True):
            storage = self.setdefault('_f_' + queue, [])
            if allow_duplicate or (msg not in storage):
                storage.append(msg)

        @manage_changed
        def pop_flash(self, queue=''):
            storage = self.pop('_f_' + queue, [])
            return storage

        @manage_accessed
        def peek_flash(self, queue=''):
            storage = self.get('_f_' + queue, [])
            return storage

        # CSRF API methods
        @manage_changed
        def new_csrf_token(self):
            token = text_(binascii.hexlify(os.urandom(20)))
            self['_csrft_'] = token
            return token

        @manage_accessed
        def get_csrf_token(self):
            token = self.get('_csrft_', None)
            if token is None:
                token = self.new_csrf_token()
            return token

        # non-API methods
        def _set_cookie(self, response):
            if not self._cookie_on_exception:
                exception = getattr(self.request, 'exception', None)
                if exception is not None: # dont set a cookie during exceptions
                    return False
            cookieval = native_(serializer.dumps(
                (self.accessed, self.created, dict(self))
                ))
            if len(cookieval) > 4064:
                raise ValueError(
                    'Cookie value is too long to store (%s bytes)' %
                    len(cookieval)
                    )
            response.set_cookie(
                self._cookie_name,
                value=cookieval,
                max_age=self._cookie_max_age,
                path=self._cookie_path,
                domain=self._cookie_domain,
                secure=self._cookie_secure,
                httponly=self._cookie_httponly,
                )
            return True

    return CookieSession


def UnencryptedCookieSessionFactoryConfig(
    secret,
    timeout=1200,
    cookie_name='session',
    cookie_max_age=None,
    cookie_path='/',
    cookie_domain=None,
    cookie_secure=False,
    cookie_httponly=False,
    cookie_on_exception=True,
    signed_serialize=signed_serialize,
    signed_deserialize=signed_deserialize,
    ):
    """
    .. deprecated:: 1.5
        Use :func:`pyramid.session.SignedCookieSessionFactory` instead.
        Caveat: Cookies generated using ``SignedCookieSessionFactory`` are not
        compatible with cookies generated using
        ``UnencryptedCookieSessionFactory``, so existing user session data
        will be destroyed if you switch to it.
    
    Configure a :term:`session factory` which will provide unencrypted
    (but signed) cookie-based sessions.  The return value of this
    function is a :term:`session factory`, which may be provided as
    the ``session_factory`` argument of a
    :class:`pyramid.config.Configurator` constructor, or used
    as the ``session_factory`` argument of the
    :meth:`pyramid.config.Configurator.set_session_factory`
    method.

    The session factory returned by this function will create sessions
    which are limited to storing fewer than 4000 bytes of data (as the
    payload must fit into a single cookie).

    Parameters:

    ``secret``
      A string which is used to sign the cookie.

    ``timeout``
      A number of seconds of inactivity before a session times out.

    ``cookie_name``
      The name of the cookie used for sessioning.

    ``cookie_max_age``
      The maximum age of the cookie used for sessioning (in seconds).
      Default: ``None`` (browser scope).

    ``cookie_path``
      The path used for the session cookie.

    ``cookie_domain``
      The domain used for the session cookie.  Default: ``None`` (no domain).

    ``cookie_secure``
      The 'secure' flag of the session cookie.

    ``cookie_httponly``
      The 'httpOnly' flag of the session cookie.

    ``cookie_on_exception``
      If ``True``, set a session cookie even if an exception occurs
      while rendering a view.

    ``signed_serialize``
      A callable which takes more or less arbitrary Python data structure and
      a secret and returns a signed serialization in bytes.
      Default: ``signed_serialize`` (using pickle).

    ``signed_deserialize``
      A callable which takes a signed and serialized data structure in bytes
      and a secret and returns the original data structure if the signature
      is valid. Default: ``signed_deserialize`` (using pickle).
    """

    class SerializerWrapper(object):
        def __init__(self, secret):
            self.secret = secret
            
        def loads(self, bstruct):
            return signed_deserialize(bstruct, secret)

        def dumps(self, appstruct):
            return signed_serialize(appstruct, secret)

    serializer = SerializerWrapper(secret)

    return BaseCookieSessionFactory(
        serializer,
        cookie_name=cookie_name,
        max_age=cookie_max_age,
        path=cookie_path,
        domain=cookie_domain,
        secure=cookie_secure,
        httponly=cookie_httponly,
        timeout=timeout,
        reissue_time=0, # to keep session.accessed == session.renewed
        set_on_exception=cookie_on_exception,
    )

deprecated(
    'UnencryptedCookieSessionFactoryConfig',
    'The UnencryptedCookieSessionFactoryConfig callable is deprecated as of '
    'Pyramid 1.5.  Use ``pyramid.session.SignedCookieSessionFactory`` instead. '
    'Caveat: Cookies generated using SignedCookieSessionFactory are not '
    'compatible with cookies generated using UnencryptedCookieSessionFactory, '
    'so existing user session data will be destroyed if you switch to it.'
    )

def SignedCookieSessionFactory(
    secret,
    cookie_name='session',
    max_age=None,
    path='/',
    domain=None,
    secure=False,
    httponly=False,
    set_on_exception=True,
    timeout=1200,
    reissue_time=0,
    hashalg='sha512',
    salt='pyramid.session.',
    serializer=None,
    ):
    """
    .. versionadded:: 1.5
    
    Configure a :term:`session factory` which will provide signed
    cookie-based sessions.  The return value of this
    function is a :term:`session factory`, which may be provided as
    the ``session_factory`` argument of a
    :class:`pyramid.config.Configurator` constructor, or used
    as the ``session_factory`` argument of the
    :meth:`pyramid.config.Configurator.set_session_factory`
    method.

    The session factory returned by this function will create sessions
    which are limited to storing fewer than 4000 bytes of data (as the
    payload must fit into a single cookie).

    Parameters:

    ``secret``
      A string which is used to sign the cookie. The secret should be at
      least as long as the block size of the selected hash algorithm. For
      ``sha512`` this would mean a 128 bit (64 character) secret.  It should
      be unique within the set of secret values provided to Pyramid for
      its various subsystems (see :ref:`admonishment_against_secret_sharing`).

    ``hashalg``
      The HMAC digest algorithm to use for signing. The algorithm must be
      supported by the :mod:`hashlib` library. Default: ``'sha512'``.

    ``salt``
      A namespace to avoid collisions between different uses of a shared
      secret. Reusing a secret for different parts of an application is
      strongly discouraged (see :ref:`admonishment_against_secret_sharing`).
      Default: ``'pyramid.session.'``.

    ``cookie_name``
      The name of the cookie used for sessioning. Default: ``'session'``.

    ``max_age``
      The maximum age of the cookie used for sessioning (in seconds).
      Default: ``None`` (browser scope).

    ``path``
      The path used for the session cookie. Default: ``'/'``.

    ``domain``
      The domain used for the session cookie.  Default: ``None`` (no domain).

    ``secure``
      The 'secure' flag of the session cookie. Default: ``False``.

    ``httponly``
      Hide the cookie from Javascript by setting the 'HttpOnly' flag of the
      session cookie. Default: ``False``.

    ``timeout``
      A number of seconds of inactivity before a session times out. If
      ``None`` then the cookie never expires. This lifetime only applies
      to the *value* within the cookie. Meaning that if the cookie expires
      due to a lower ``max_age``, then this setting has no effect.
      Default: ``1200``.

    ``reissue_time``
      The number of seconds that must pass before the cookie is automatically
      reissued as the result of accessing the session. The
      duration is measured as the number of seconds since the last session
      cookie was issued and 'now'.  If this value is ``0``, a new cookie
      will be reissued on every request accessing the session. If ``None``
      then the cookie's lifetime will never be extended.

      A good rule of thumb: if you want auto-expired cookies based on
      inactivity: set the ``timeout`` value to 1200 (20 mins) and set the
      ``reissue_time`` value to perhaps a tenth of the ``timeout`` value
      (120 or 2 mins).  It's nonsensical to set the ``timeout`` value lower
      than the ``reissue_time`` value, as the ticket will never be reissued.
      However, such a configuration is not explicitly prevented.

      Default: ``0``.

    ``set_on_exception``
      If ``True``, set a session cookie even if an exception occurs
      while rendering a view. Default: ``True``.

    ``serializer``
      An object with two methods: ``loads`` and ``dumps``.  The ``loads`` method
      should accept bytes and return a Python object.  The ``dumps`` method
      should accept a Python object and return bytes.  A ``ValueError`` should
      be raised for malformed inputs.  If a serializer is not passed, the
      :class:`pyramid.session.PickleSerializer` serializer will be used.

    .. versionadded: 1.5a3
    """
    if serializer is None:
        serializer = PickleSerializer()

    signed_serializer = SignedSerializer(
        secret,
        salt, 
        hashalg,
        serializer=serializer,
        )

    return BaseCookieSessionFactory(
        signed_serializer,
        cookie_name=cookie_name,
        max_age=max_age,
        path=path,
        domain=domain,
        secure=secure,
        httponly=httponly,
        timeout=timeout,
        reissue_time=reissue_time,
        set_on_exception=set_on_exception,
    )

```
--- END FILE ---

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

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

Here is an example:

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

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

**Description:**
When managing session access, if the session's `_reissue_time` attribute is set to `None` or contains an invalid type (e.g., a string), the session handling logic attempts arithmetic operations that result in a `TypeError`. This prevents the session from functioning correctly and can lead to unexpected crashes.

**Example Code:**
```python
import time
from pyramid.session import BaseCookieSessionFactory
from pyramid.testing import DummyRequest

# Dummy serializer for demonstration
class DummySerializer:
    def loads(self, data):
        return data

    def dumps(self, obj):
        return obj

# Serialize function for the example
def serialize(value):
    import json
    return json.dumps(value)

# Create a session factory with _reissue_time set to None
serializer = DummySerializer()
factory = BaseCookieSessionFactory(serializer, reissue_time=None)
request = DummyRequest()
request.cookies['session'] = serialize((int(time.time()), 0, {'user_id': 123}))

# Attempt to access the session
session = factory(request)
user_id = session['user_id']
```

**Expected Behavior:**
The session should handle cases where `_reissue_time` is `None` without raising exceptions. It should allow access to session data seamlessly, maintaining the session state as expected.

**Actual Behavior:**
A `TypeError` is raised during session access because the code attempts to perform arithmetic operations between incompatible types (`int` and `NoneType` or `str`), as shown below:

```
TypeError: '>' not supported between instances of 'int' and 'NoneType'
```
or
```
TypeError: unsupported operand type(s) for -: 'int' and 'str'
```

This error disrupts the normal flow of the application and prevents proper session management.

[/ISSUE]
{
    "TestBaseCookieSession.test__set_cookie_cookieval_too_long": "PASSED",
    "TestBaseCookieSession.test__set_cookie_on_exception": "PASSED",
    "TestBaseCookieSession.test__set_cookie_on_exception_no_request_exception": "PASSED",
    "TestBaseCookieSession.test__set_cookie_options": "PASSED",
    "TestBaseCookieSession.test__set_cookie_real_webob_response": "PASSED",
    "TestBaseCookieSession.test_changed": "PASSED",
    "TestBaseCookieSession.test_cookie_is_set": "PASSED",
    "TestBaseCookieSession.test_ctor_no_cookie": "PASSED",
    "TestBaseCookieSession.test_ctor_with_bad_cookie_cannot_deserialize": "PASSED",
    "TestBaseCookieSession.test_ctor_with_bad_cookie_not_tuple": "PASSED",
    "TestBaseCookieSession.test_ctor_with_cookie_expired": "PASSED",
    "TestBaseCookieSession.test_ctor_with_cookie_still_valid": "PASSED",
    "TestBaseCookieSession.test_flash_allow_duplicate_false": "PASSED",
    "TestBaseCookieSession.test_flash_allow_duplicate_false_and_msg_not_in_storage": "PASSED",
    "TestBaseCookieSession.test_flash_allow_duplicate_true_and_msg_not_in_storage": "PASSED",
    "TestBaseCookieSession.test_flash_default": "PASSED",
    "TestBaseCookieSession.test_flash_mixed": "PASSED",
    "TestBaseCookieSession.test_get_csrf_token": "PASSED",
    "TestBaseCookieSession.test_get_csrf_token_new": "PASSED",
    "TestBaseCookieSession.test_instance_conforms": "PASSED",
    "TestBaseCookieSession.test_invalidate": "PASSED",
    "TestBaseCookieSession.test_new_csrf_token": "PASSED",
    "TestBaseCookieSession.test_no_set_cookie_with_exception": "PASSED",
    "TestBaseCookieSession.test_peek_flash_default_queue": "PASSED",
    "TestBaseCookieSession.test_peek_flash_nodefault_queue": "PASSED",
    "TestBaseCookieSession.test_pop_flash_default_queue": "PASSED",
    "TestBaseCookieSession.test_pop_flash_nodefault_queue": "PASSED",
    "TestBaseCookieSession.test_reissue_never": "PASSED",
    "TestBaseCookieSession.test_reissue_not_triggered": "PASSED",
    "TestBaseCookieSession.test_reissue_triggered": "PASSED",
    "TestBaseCookieSession.test_set_cookie_with_exception": "PASSED",
    "TestBaseCookieSession.test_timeout": "PASSED",
    "TestBaseCookieSession.test_timeout_never": "PASSED",
    "TestSignedCookieSession.test__set_cookie_cookieval_too_long": "PASSED",
    "TestSignedCookieSession.test__set_cookie_on_exception": "PASSED",
    "TestSignedCookieSession.test__set_cookie_on_exception_no_request_exception": "PASSED",
    "TestSignedCookieSession.test__set_cookie_options": "PASSED",
    "TestSignedCookieSession.test__set_cookie_real_webob_response": "PASSED",
    "TestSignedCookieSession.test_changed": "PASSED",
    "TestSignedCookieSession.test_cookie_is_set": "PASSED",
    "TestSignedCookieSession.test_ctor_no_cookie": "PASSED",
    "TestSignedCookieSession.test_ctor_with_bad_cookie_cannot_deserialize": "PASSED",
    "TestSignedCookieSession.test_ctor_with_bad_cookie_not_tuple": "PASSED",
    "TestSignedCookieSession.test_ctor_with_cookie_expired": "PASSED",
    "TestSignedCookieSession.test_ctor_with_cookie_still_valid": "PASSED",
    "TestSignedCookieSession.test_custom_hashalg": "PASSED",
    "TestSignedCookieSession.test_custom_salt": "PASSED",
    "TestSignedCookieSession.test_custom_serializer": "PASSED",
    "TestSignedCookieSession.test_flash_allow_duplicate_false": "PASSED",
    "TestSignedCookieSession.test_flash_allow_duplicate_false_and_msg_not_in_storage": "PASSED",
    "TestSignedCookieSession.test_flash_allow_duplicate_true_and_msg_not_in_storage": "PASSED",
    "TestSignedCookieSession.test_flash_default": "PASSED",
    "TestSignedCookieSession.test_flash_mixed": "PASSED",
    "TestSignedCookieSession.test_get_csrf_token": "PASSED",
    "TestSignedCookieSession.test_get_csrf_token_new": "PASSED",
    "TestSignedCookieSession.test_hashalg_mismatch": "PASSED",
    "TestSignedCookieSession.test_instance_conforms": "PASSED",
    "TestSignedCookieSession.test_invalid_data_size": "PASSED",
    "TestSignedCookieSession.test_invalidate": "PASSED",
    "TestSignedCookieSession.test_new_csrf_token": "PASSED",
    "TestSignedCookieSession.test_no_set_cookie_with_exception": "PASSED",
    "TestSignedCookieSession.test_peek_flash_default_queue": "PASSED",
    "TestSignedCookieSession.test_peek_flash_nodefault_queue": "PASSED",
    "TestSignedCookieSession.test_pop_flash_default_queue": "PASSED",
    "TestSignedCookieSession.test_pop_flash_nodefault_queue": "PASSED",
    "TestSignedCookieSession.test_reissue_never": "PASSED",
    "TestSignedCookieSession.test_reissue_not_triggered": "PASSED",
    "TestSignedCookieSession.test_reissue_triggered": "PASSED",
    "TestSignedCookieSession.test_salt_mismatch": "PASSED",
    "TestSignedCookieSession.test_secret_mismatch": "PASSED",
    "TestSignedCookieSession.test_set_cookie_with_exception": "PASSED",
    "TestSignedCookieSession.test_timeout": "PASSED",
    "TestSignedCookieSession.test_timeout_never": "PASSED",
    "TestSignedCookieSession.test_very_long_key": "PASSED",
    "TestUnencryptedCookieSession.test__set_cookie_cookieval_too_long": "PASSED",
    "TestUnencryptedCookieSession.test__set_cookie_on_exception": "PASSED",
    "TestUnencryptedCookieSession.test__set_cookie_on_exception_no_request_exception": "PASSED",
    "TestUnencryptedCookieSession.test__set_cookie_options": "PASSED",
    "TestUnencryptedCookieSession.test__set_cookie_real_webob_response": "PASSED",
    "TestUnencryptedCookieSession.test_changed": "PASSED",
    "TestUnencryptedCookieSession.test_cookie_is_set": "PASSED",
    "TestUnencryptedCookieSession.test_ctor_no_cookie": "PASSED",
    "TestUnencryptedCookieSession.test_ctor_with_bad_cookie_cannot_deserialize": "PASSED",
    "TestUnencryptedCookieSession.test_ctor_with_bad_cookie_not_tuple": "PASSED",
    "TestUnencryptedCookieSession.test_ctor_with_cookie_expired": "PASSED",
    "TestUnencryptedCookieSession.test_ctor_with_cookie_still_valid": "PASSED",
    "TestUnencryptedCookieSession.test_deserialize_option": "PASSED",
    "TestUnencryptedCookieSession.test_flash_allow_duplicate_false": "PASSED",
    "TestUnencryptedCookieSession.test_flash_allow_duplicate_false_and_msg_not_in_storage": "PASSED",
    "TestUnencryptedCookieSession.test_flash_allow_duplicate_true_and_msg_not_in_storage": "PASSED",
    "TestUnencryptedCookieSession.test_flash_default": "PASSED",
    "TestUnencryptedCookieSession.test_flash_mixed": "PASSED",
    "TestUnencryptedCookieSession.test_get_csrf_token": "PASSED",
    "TestUnencryptedCookieSession.test_get_csrf_token_new": "PASSED",
    "TestUnencryptedCookieSession.test_instance_conforms": "PASSED",
    "TestUnencryptedCookieSession.test_invalidate": "PASSED",
    "TestUnencryptedCookieSession.test_new_csrf_token": "PASSED",
    "TestUnencryptedCookieSession.test_no_set_cookie_with_exception": "PASSED",
    "TestUnencryptedCookieSession.test_peek_flash_default_queue": "PASSED",
    "TestUnencryptedCookieSession.test_peek_flash_nodefault_queue": "PASSED",
    "TestUnencryptedCookieSession.test_pop_flash_default_queue": "PASSED",
    "TestUnencryptedCookieSession.test_pop_flash_nodefault_queue": "PASSED",
    "TestUnencryptedCookieSession.test_reissue_triggered": "PASSED",
    "TestUnencryptedCookieSession.test_serialize_option": "PASSED",
    "TestUnencryptedCookieSession.test_set_cookie_with_exception": "PASSED",
    "TestUnencryptedCookieSession.test_timeout": "PASSED",
    "TestUnencryptedCookieSession.test_timeout_never": "PASSED",
    "Test_manage_accessed.test_accessed_set": "PASSED",
    "Test_manage_accessed.test_accessed_without_renew": "PASSED",
    "Test_manage_accessed.test_already_dirty": "PASSED",
    "Test_manage_changed.test_it": "PASSED",
    "Test_signed_serialize.test_it": "PASSED",
    "Test_signed_deserialize.test_invalid_bits": "PASSED",
    "Test_signed_deserialize.test_invalid_len": "PASSED",
    "Test_signed_deserialize.test_it": "PASSED",
    "Test_signed_deserialize.test_it_bad_encoding": "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_directory": "PASSED",
    "TestAssetsConfiguratorMixin.test_override_asset_directory_with_file": "PASSED",
    "TestAssetsConfiguratorMixin.test_override_asset_directory_with_package": "PASSED",
    "TestAssetsConfiguratorMixin.test_override_asset_file_with_directory": "PASSED",
    "TestAssetsConfiguratorMixin.test_override_asset_file_with_file": "PASSED",
    "TestAssetsConfiguratorMixin.test_override_asset_file_with_package": "PASSED",
    "TestAssetsConfiguratorMixin.test_override_asset_package_with_directory": "PASSED",
    "TestAssetsConfiguratorMixin.test_override_asset_package_with_package": "PASSED",
    "TestAssetsConfiguratorMixin.test_override_asset_samename": "PASSED",
    "TestOverrideProvider.test_get_resource_filename_override_returns_value": "PASSED",
    "TestOverrideProvider.test_get_resource_stream_no_overrides": "PASSED",
    "TestOverrideProvider.test_get_resource_stream_override_returns_None": "PASSED",
    "TestOverrideProvider.test_get_resource_stream_override_returns_value": "PASSED",
    "TestOverrideProvider.test_get_resource_string_no_overrides": "PASSED",
    "TestOverrideProvider.test_get_resource_string_override_returns_None": "PASSED",
    "TestOverrideProvider.test_get_resource_string_override_returns_value": "PASSED",
    "TestOverrideProvider.test_has_resource_no_overrides": "PASSED",
    "TestOverrideProvider.test_has_resource_override_returns_None": "PASSED",
    "TestOverrideProvider.test_has_resource_override_returns_True": "PASSED",
    "TestOverrideProvider.test_resource_isdir_no_overrides": "PASSED",
    "TestOverrideProvider.test_resource_isdir_override_returns_False": "PASSED",
    "TestOverrideProvider.test_resource_isdir_override_returns_None": "PASSED",
    "TestOverrideProvider.test_resource_listdir_no_overrides": "PASSED",
    "TestOverrideProvider.test_resource_listdir_override_returns_None": "PASSED",
    "TestOverrideProvider.test_resource_listdir_override_returns_values": "PASSED",
    "TestPackageOverrides.test_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_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_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",
    "TestPackageOverrides.test_search_path": "PASSED",
    "TestDirectoryOverride.test_it_match": "PASSED",
    "TestDirectoryOverride.test_it_no_match": "PASSED",
    "TestFileOverride.test_it_match": "PASSED",
    "TestFileOverride.test_it_no_match": "PASSED",
    "TestFactoriesMixin.test_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_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_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_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_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",
    "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_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_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_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_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_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_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_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_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",
    "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_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_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_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_show_scaffolds_exist": "PASSED",
    "TestPCreateCommand.test_run_show_scaffolds_none_exist": "PASSED",
    "TestPCreateCommand.test_unknown_scaffold_name": "PASSED",
    "Test_main.test_it": "PASSED",
    "TestPDistReportCommand.test_no_dists": "PASSED",
    "TestPDistReportCommand.test_with_dists": "PASSED",
    "TestPRequestCommand.test_command_has_bad_config_header": "PASSED",
    "TestPRequestCommand.test_command_not_enough_args": "PASSED",
    "TestPRequestCommand.test_command_response_has_no_charset": "PASSED",
    "TestPRoutesCommand.test__get_mapper": "PASSED",
    "TestPRoutesCommand.test_bad_args": "PASSED",
    "TestPRoutesCommand.test_good_args": "PASSED",
    "TestPRoutesCommand.test_no_mapper": "PASSED",
    "TestPRoutesCommand.test_no_routes": "PASSED",
    "TestPRoutesCommand.test_route_with_no_slash_prefix": "PASSED",
    "TestPRoutesCommand.test_single_route_no_route_registered": "PASSED",
    "TestPRoutesCommand.test_single_route_no_views_registered": "PASSED",
    "TestPRoutesCommand.test_single_route_one_view_registered": "PASSED",
    "TestPRoutesCommand.test_single_route_one_view_registered_with_factory": "PASSED",
    "TestPServeCommand.test_get_options_no_command": "PASSED",
    "TestPServeCommand.test_get_options_with_command": "PASSED",
    "TestPServeCommand.test_parse_vars_bad": "PASSED",
    "TestPServeCommand.test_parse_vars_good": "PASSED",
    "TestPServeCommand.test_record_pid_not_verbose": "PASSED",
    "TestPServeCommand.test_record_pid_verbose": "PASSED",
    "TestPServeCommand.test_remove_pid_current_pid_is_not_pid_in_file": "PASSED",
    "TestPServeCommand.test_remove_pid_current_pid_is_not_written_pid": "PASSED",
    "TestPServeCommand.test_remove_pid_file_not_verbose": "PASSED",
    "TestPServeCommand.test_remove_pid_file_stale_pid_write_exception": "PASSED",
    "TestPServeCommand.test_remove_pid_file_unlink_exception": "PASSED",
    "TestPServeCommand.test_remove_pid_file_verbose": "PASSED",
    "TestPServeCommand.test_remove_pid_no_pid_file": "PASSED",
    "TestPServeCommand.test_remove_pid_not_a_number": "PASSED",
    "TestPServeCommand.test_run_no_args": "PASSED",
    "TestPServeCommand.test_run_stop_daemon_bad_pid_file": "PASSED",
    "TestPServeCommand.test_run_stop_daemon_invalid_pid_in_file": "PASSED",
    "TestPServeCommand.test_run_stop_daemon_no_such_pid_file": "PASSED",
    "Test_read_pidfile.test_read_pidfile": "PASSED",
    "Test_read_pidfile.test_read_pidfile_no_pid_file": "PASSED",
    "Test_read_pidfile.test_read_pidfile_not_a_number": "PASSED",
    "TestLazyWriter.test_flush": "PASSED",
    "TestLazyWriter.test_open": "PASSED",
    "TestLazyWriter.test_write": "PASSED",
    "TestLazyWriter.test_writeline": "PASSED",
    "Test__methodwrapper.test___call__fail": "PASSED",
    "Test__methodwrapper.test___call__succeed": "PASSED",
    "TestPShellCommand.test_command_custom_section_override": "PASSED",
    "TestPShellCommand.test_command_loads_bpython_shell": "PASSED",
    "TestPShellCommand.test_command_loads_check_variable_override_order": "PASSED",
    "TestPShellCommand.test_command_loads_custom_items": "PASSED",
    "TestPShellCommand.test_command_loads_default_shell": "PASSED",
    "TestPShellCommand.test_command_loads_default_shell_with_unknown_shell": "PASSED",
    "TestPShellCommand.test_command_loads_ipython_v0_10": "PASSED",
    "TestPShellCommand.test_command_loads_ipython_v0_11": "PASSED",
    "TestPShellCommand.test_command_loads_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_v0_10_shell": "PASSED",
    "TestPShellCommand.test_make_ipython_v0_11_shell": "PASSED",
    "TestPShellCommand.test_make_ipython_v1_1_shell": "PASSED",
    "TestPShellCommand.test_shell_ipython_ordering": "PASSED",
    "TestPShellCommand.test_shell_ordering": "PASSED",
    "TestPTweensCommand.test__get_tweens": "PASSED",
    "TestPTweensCommand.test_command_implicit_and_explicit_tweens": "PASSED",
    "TestPTweensCommand.test_command_implicit_tweens_only": "PASSED",
    "TestPTweensCommand.test_command_no_tweens": "PASSED",
    "TestPViewsCommand.test__find_multi_routes_all_match": "PASSED",
    "TestPViewsCommand.test__find_multi_routes_none_match": "PASSED",
    "TestPViewsCommand.test__find_multi_routes_some_match": "PASSED",
    "TestPViewsCommand.test__find_view_no_match": "PASSED",
    "TestPViewsCommand.test__find_view_no_match_multiview_registered": "PASSED",
    "TestPViewsCommand.test__find_view_route_multiview": "PASSED",
    "TestPViewsCommand.test__find_view_route_multiview_no_view_registered": "PASSED",
    "TestPViewsCommand.test__find_view_route_no_multiview": "PASSED",
    "TestPViewsCommand.test__find_view_traversal": "PASSED",
    "TestPViewsCommand.test__find_view_traversal_multiview": "PASSED",
    "TestPViewsCommand.test_views_command_multi_view_nested": "PASSED",
    "TestPViewsCommand.test_views_command_multiview": "PASSED",
    "TestPViewsCommand.test_views_command_multiview_with_permission": "PASSED",
    "TestPViewsCommand.test_views_command_multiview_with_predicates": "PASSED",
    "TestPViewsCommand.test_views_command_not_found": "PASSED",
    "TestPViewsCommand.test_views_command_not_found_url_starts_without_slash": "PASSED",
    "TestPViewsCommand.test_views_command_single_view_route": "PASSED",
    "TestPViewsCommand.test_views_command_single_view_route_with_route_predicates": "PASSED",
    "TestPViewsCommand.test_views_command_single_view_traversal": "PASSED",
    "TestPViewsCommand.test_views_command_single_view_traversal_with_permission": "PASSED",
    "TestPViewsCommand.test_views_command_single_view_traversal_with_predicates": "PASSED",
    "Test_check_csrf_token.test_failure_no_raises": "FAILED",
    "Test_check_csrf_token.test_failure_raises": "FAILED",
    "Test_check_csrf_token.test_success_default_header": "FAILED",
    "Test_check_csrf_token.test_success_default_token": "FAILED",
    "Test_check_csrf_token.test_success_header": "FAILED",
    "Test_check_csrf_token.test_success_token": "FAILED",
    "AdaptersConfiguratorMixinTests.test_add_resource_url_adapter_dotted_names": "FAILED",
    "AdaptersConfiguratorMixinTests.test_add_resource_url_adapter_introspectables": "FAILED",
    "AdaptersConfiguratorMixinTests.test_add_traverser_dotted_names": "FAILED",
    "TestOverrideProvider.test_get_resource_filename_no_overrides": "FAILED",
    "TestOverrideProvider.test_get_resource_filename_override_returns_None": "FAILED",
    "TestPackageOverrides.test_get_filename": "FAILED",
    "TestI18NConfiguratorMixin.test_add_translation_dirs_abspath": "FAILED",
    "TestI18NConfiguratorMixin.test_add_translation_dirs_asset_spec": "FAILED",
    "TestI18NConfiguratorMixin.test_add_translation_dirs_asset_spec_existing_translation_dirs": "FAILED",
    "TestI18NConfiguratorMixin.test_add_translation_dirs_multiple_specs": "FAILED",
    "TestI18NConfiguratorMixin.test_add_translation_dirs_multiple_specs_multiple_calls": "FAILED",
    "ConfiguratorTests.test_ctor_no_registry": "FAILED",
    "ConfiguratorTests.test_ctor_noreg_debug_logger_None_default": "FAILED",
    "ConfiguratorTests.test_scan_integration_conflict": "FAILED",
    "ConfiguratorTests.test_setup_registry_debug_logger_None_default": "FAILED",
    "TestConfigurator_add_directive.test_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_custom_predicate_bests_standard_predicate": "FAILED",
    "TestViewsConfigurationMixin.test_add_view_with_custom_predicates_match": "FAILED",
    "TestViewsConfigurationMixin.test_add_view_with_custom_predicates_nomatch": "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",
    "TestPViewsCommand.test_views_command_single_view_function_traversal": "FAILED"
}
diff --git a/pyramid/session.py b/pyramid/session.py
index 9fe2add60..56d99e9de 100644
--- a/pyramid/session.py
+++ b/pyramid/session.py
@@ -27,8 +27,9 @@ def manage_accessed(wrapped):
     method is called."""
     def accessed(session, *arg, **kw):
         session.accessed = now = int(time.time())
-        if now - session.renewed > session._reissue_time:
-            session.changed()
+        if session._reissue_time is not None:
+            if now - session.renewed > session._reissue_time:
+                session.changed()
         return wrapped(session, *arg, **kw)
     accessed.__doc__ = wrapped.__doc__
     return accessed
@@ -165,10 +166,10 @@ def BaseCookieSessionFactory(
     Parameters:
 
     ``serializer``
-      An object with two methods: ``loads`` and ``dumps``.  The ``loads`` method
-      should accept bytes and return a Python object.  The ``dumps`` method
-      should accept a Python object and return bytes.  A ``ValueError`` should
-      be raised for malformed inputs.
+      An object with two methods: ``loads`` and ``dumps``.  The ``loads``
+      method should accept bytes and return a Python object.  The ``dumps``
+      method should accept a Python object and return bytes.  A ``ValueError``
+      should be raised for malformed inputs.
 
     ``cookie_name``
       The name of the cookie used for sessioning. Default: ``'session'``.
@@ -256,17 +257,24 @@ def BaseCookieSessionFactory(
 
             if value is not None:
                 try:
-                    renewed, created, state = value
+                    # since the value is not necessarily signed, we have
+                    # to unpack it a little carefully
+                    rval, cval, sval = value
+                    renewed = float(rval)
+                    created = float(cval)
+                    state = sval
                     new = False
-                    if now - renewed > self._timeout:
-                        # expire the session because it was not renewed
-                        # before the timeout threshold
-                        state = {}
-                except TypeError:
+                except (TypeError, ValueError):
                     # value failed to unpack properly or renewed was not
                     # a numeric type so we'll fail deserialization here
                     state = {}
 
+            if self._timeout is not None:
+                if now - renewed > self._timeout:
+                    # expire the session because it was not renewed
+                    # before the timeout threshold
+                    state = {}
+
             self.created = created
             self.accessed = renewed
             self.renewed = renewed
@@ -473,8 +481,8 @@ def UnencryptedCookieSessionFactoryConfig(
 deprecated(
     'UnencryptedCookieSessionFactoryConfig',
     'The UnencryptedCookieSessionFactoryConfig callable is deprecated as of '
-    'Pyramid 1.5.  Use ``pyramid.session.SignedCookieSessionFactory`` instead. '
-    'Caveat: Cookies generated using SignedCookieSessionFactory are not '
+    'Pyramid 1.5.  Use ``pyramid.session.SignedCookieSessionFactory`` instead.'
+    ' Caveat: Cookies generated using SignedCookieSessionFactory are not '
     'compatible with cookies generated using UnencryptedCookieSessionFactory, '
     'so existing user session data will be destroyed if you switch to it.'
     )
@@ -578,11 +586,11 @@ def SignedCookieSessionFactory(
       while rendering a view. Default: ``True``.
 
     ``serializer``
-      An object with two methods: ``loads`` and ``dumps``.  The ``loads`` method
-      should accept bytes and return a Python object.  The ``dumps`` method
-      should accept a Python object and return bytes.  A ``ValueError`` should
-      be raised for malformed inputs.  If a serializer is not passed, the
-      :class:`pyramid.session.PickleSerializer` serializer will be used.
+      An object with two methods: ``loads`` and ``dumps``.  The ``loads``
+      method should accept bytes and return a Python object.  The ``dumps``
+      method should accept a Python object and return bytes.  A ``ValueError``
+      should be raised for malformed inputs.  If a serializer is not passed,
+      the :class:`pyramid.session.PickleSerializer` serializer will be used.
 
     .. versionadded: 1.5a3
     """
@@ -591,7 +599,7 @@ def SignedCookieSessionFactory(
 
     signed_serializer = SignedSerializer(
         secret,
-        salt, 
+        salt,
         hashalg,
         serializer=serializer,
         )

{"pyramid/session.py": "import base64\nimport binascii\nimport hashlib\nimport hmac\nimport os\nimport time\n\nfrom zope.deprecation import deprecated\nfrom zope.interface import implementer\n\nfrom webob.cookies import SignedSerializer\n\nfrom pyramid.compat import (\n    pickle,\n    PY3,\n    text_,\n    bytes_,\n    native_,\n    )\n\nfrom pyramid.exceptions import BadCSRFToken\nfrom pyramid.interfaces import ISession\nfrom pyramid.util import strings_differ\n\ndef manage_accessed(wrapped):\n    \"\"\" Decorator which causes a cookie to be renewed when an accessor\n    method is called.\"\"\"\n    def accessed(session, *arg, **kw):\n        session.accessed = now = int(time.time())\n        if now - session.renewed > session._reissue_time:\n            session.changed()\n        return wrapped(session, *arg, **kw)\n    accessed.__doc__ = wrapped.__doc__\n    return accessed\n\ndef manage_changed(wrapped):\n    \"\"\" Decorator which causes a cookie to be set when a setter method\n    is called.\"\"\"\n    def changed(session, *arg, **kw):\n        session.accessed = int(time.time())\n        session.changed()\n        return wrapped(session, *arg, **kw)\n    changed.__doc__ = wrapped.__doc__\n    return changed\n\ndef signed_serialize(data, secret):\n    \"\"\" Serialize any pickleable structure (``data``) and sign it\n    using the ``secret`` (must be a string).  Return the\n    serialization, which includes the signature as its first 40 bytes.\n    The ``signed_deserialize`` method will deserialize such a value.\n\n    This function is useful for creating signed cookies.  For example:\n\n    .. code-block:: python\n\n       cookieval = signed_serialize({'a':1}, 'secret')\n       response.set_cookie('signed_cookie', cookieval)\n    \"\"\"\n    pickled = pickle.dumps(data, pickle.HIGHEST_PROTOCOL)\n    sig = hmac.new(bytes_(secret), pickled, hashlib.sha1).hexdigest()\n    return sig + native_(base64.b64encode(pickled))\n\ndef signed_deserialize(serialized, secret, hmac=hmac):\n    \"\"\" Deserialize the value returned from ``signed_serialize``.  If\n    the value cannot be deserialized for any reason, a\n    :exc:`ValueError` exception will be raised.\n\n    This function is useful for deserializing a signed cookie value\n    created by ``signed_serialize``.  For example:\n\n    .. code-block:: python\n\n       cookieval = request.cookies['signed_cookie']\n       data = signed_deserialize(cookieval, 'secret')\n    \"\"\"\n    # hmac parameterized only for unit tests\n    try:\n        input_sig, pickled = (bytes_(serialized[:40]),\n                              base64.b64decode(bytes_(serialized[40:])))\n    except (binascii.Error, TypeError) as e:\n        # Badly formed data can make base64 die\n        raise ValueError('Badly formed base64 data: %s' % e)\n\n    sig = bytes_(hmac.new(bytes_(secret), pickled, hashlib.sha1).hexdigest())\n\n    # Avoid timing attacks (see\n    # http://seb.dbzteam.org/crypto/python-oauth-timing-hmac.pdf)\n    if strings_differ(sig, input_sig):\n        raise ValueError('Invalid signature')\n\n    return pickle.loads(pickled)\n\ndef check_csrf_token(request,\n                     token='csrf_token',\n                     header='X-CSRF-Token',\n                     raises=True):\n    \"\"\" Check the CSRF token in the request's session against the value in\n    ``request.params.get(token)`` or ``request.headers.get(header)``.\n    If a ``token`` keyword is not supplied to this function, the string\n    ``csrf_token`` will be used to look up the token in ``request.params``.\n    If a ``header`` keyword is not supplied to this function, the string\n    ``X-CSRF-Token`` will be used to look up the token in ``request.headers``.\n\n    If the value supplied by param or by header doesn't match the value\n    supplied by ``request.session.get_csrf_token()``, and ``raises`` is\n    ``True``, this function will raise an\n    :exc:`pyramid.exceptions.BadCSRFToken` exception.\n    If the check does succeed and ``raises`` is ``False``, this\n    function will return ``False``.  If the CSRF check is successful, this\n    function will return ``True`` unconditionally.\n\n    Note that using this function requires that a :term:`session factory` is\n    configured.\n\n    .. versionadded:: 1.4a2\n    \"\"\"\n    supplied_token = request.params.get(token, request.headers.get(header))\n    if supplied_token != request.session.get_csrf_token():\n        if raises:\n            raise BadCSRFToken('check_csrf_token(): Invalid token')\n        return False\n    return True\n\nclass PickleSerializer(object):\n    \"\"\" A Webob cookie serializer that uses the pickle protocol to dump Python\n    data to bytes.\"\"\"\n    def loads(self, bstruct):\n        return pickle.loads(bstruct)\n\n    def dumps(self, appstruct):\n        return pickle.dumps(appstruct, pickle.HIGHEST_PROTOCOL)\n\ndef BaseCookieSessionFactory(\n    serializer,\n    cookie_name='session',\n    max_age=None,\n    path='/',\n    domain=None,\n    secure=False,\n    httponly=False,\n    timeout=1200,\n    reissue_time=0,\n    set_on_exception=True,\n    ):\n    \"\"\"\n    .. versionadded:: 1.5\n    \n    Configure a :term:`session factory` which will provide cookie-based\n    sessions.  The return value of this function is a :term:`session factory`,\n    which may be provided as the ``session_factory`` argument of a\n    :class:`pyramid.config.Configurator` constructor, or used as the\n    ``session_factory`` argument of the\n    :meth:`pyramid.config.Configurator.set_session_factory` method.\n\n    The session factory returned by this function will create sessions\n    which are limited to storing fewer than 4000 bytes of data (as the\n    payload must fit into a single cookie).\n\n    .. warning:\n\n       This class provides no protection from tampering and is only intended\n       to be used by framework authors to create their own cookie-based\n       session factories.\n\n    Parameters:\n\n    ``serializer``\n      An object with two methods: ``loads`` and ``dumps``.  The ``loads`` method\n      should accept bytes and return a Python object.  The ``dumps`` method\n      should accept a Python object and return bytes.  A ``ValueError`` should\n      be raised for malformed inputs.\n\n    ``cookie_name``\n      The name of the cookie used for sessioning. Default: ``'session'``.\n\n    ``max_age``\n      The maximum age of the cookie used for sessioning (in seconds).\n      Default: ``None`` (browser scope).\n\n    ``path``\n      The path used for the session cookie. Default: ``'/'``.\n\n    ``domain``\n      The domain used for the session cookie.  Default: ``None`` (no domain).\n\n    ``secure``\n      The 'secure' flag of the session cookie. Default: ``False``.\n\n    ``httponly``\n      Hide the cookie from Javascript by setting the 'HttpOnly' flag of the\n      session cookie. Default: ``False``.\n\n    ``timeout``\n      A number of seconds of inactivity before a session times out. If\n      ``None`` then the cookie never expires. This lifetime only applies\n      to the *value* within the cookie. Meaning that if the cookie expires\n      due to a lower ``max_age``, then this setting has no effect.\n      Default: ``1200``.\n\n    ``reissue_time``\n      The number of seconds that must pass before the cookie is automatically\n      reissued as the result of a request which accesses the session. The\n      duration is measured as the number of seconds since the last session\n      cookie was issued and 'now'.  If this value is ``0``, a new cookie\n      will be reissued on every request accessing the session. If ``None``\n      then the cookie's lifetime will never be extended.\n\n      A good rule of thumb: if you want auto-expired cookies based on\n      inactivity: set the ``timeout`` value to 1200 (20 mins) and set the\n      ``reissue_time`` value to perhaps a tenth of the ``timeout`` value\n      (120 or 2 mins).  It's nonsensical to set the ``timeout`` value lower\n      than the ``reissue_time`` value, as the ticket will never be reissued.\n      However, such a configuration is not explicitly prevented.\n\n      Default: ``0``.\n\n    ``set_on_exception``\n      If ``True``, set a session cookie even if an exception occurs\n      while rendering a view. Default: ``True``.\n\n    .. versionadded: 1.5a3\n    \"\"\"\n\n    @implementer(ISession)\n    class CookieSession(dict):\n        \"\"\" Dictionary-like session object \"\"\"\n\n        # configuration parameters\n        _cookie_name = cookie_name\n        _cookie_max_age = max_age\n        _cookie_path = path\n        _cookie_domain = domain\n        _cookie_secure = secure\n        _cookie_httponly = httponly\n        _cookie_on_exception = set_on_exception\n        _timeout = timeout\n        _reissue_time = reissue_time\n\n        # dirty flag\n        _dirty = False\n\n        def __init__(self, request):\n            self.request = request\n            now = time.time()\n            created = renewed = now\n            new = True\n            value = None\n            state = {}\n            cookieval = request.cookies.get(self._cookie_name)\n            if cookieval is not None:\n                try:\n                    value = serializer.loads(bytes_(cookieval))\n                except ValueError:\n                    # the cookie failed to deserialize, dropped\n                    value = None\n\n            if value is not None:\n                try:\n                    renewed, created, state = value\n                    new = False\n                    if now - renewed > self._timeout:\n                        # expire the session because it was not renewed\n                        # before the timeout threshold\n                        state = {}\n                except TypeError:\n                    # value failed to unpack properly or renewed was not\n                    # a numeric type so we'll fail deserialization here\n                    state = {}\n\n            self.created = created\n            self.accessed = renewed\n            self.renewed = renewed\n            self.new = new\n            dict.__init__(self, state)\n\n        # ISession methods\n        def changed(self):\n            if not self._dirty:\n                self._dirty = True\n                def set_cookie_callback(request, response):\n                    self._set_cookie(response)\n                    self.request = None # explicitly break cycle for gc\n                self.request.add_response_callback(set_cookie_callback)\n\n        def invalidate(self):\n            self.clear() # XXX probably needs to unset cookie\n\n        # non-modifying dictionary methods\n        get = manage_accessed(dict.get)\n        __getitem__ = manage_accessed(dict.__getitem__)\n        items = manage_accessed(dict.items)\n        values = manage_accessed(dict.values)\n        keys = manage_accessed(dict.keys)\n        __contains__ = manage_accessed(dict.__contains__)\n        __len__ = manage_accessed(dict.__len__)\n        __iter__ = manage_accessed(dict.__iter__)\n\n        if not PY3:\n            iteritems = manage_accessed(dict.iteritems)\n            itervalues = manage_accessed(dict.itervalues)\n            iterkeys = manage_accessed(dict.iterkeys)\n            has_key = manage_accessed(dict.has_key)\n\n        # modifying dictionary methods\n        clear = manage_changed(dict.clear)\n        update = manage_changed(dict.update)\n        setdefault = manage_changed(dict.setdefault)\n        pop = manage_changed(dict.pop)\n        popitem = manage_changed(dict.popitem)\n        __setitem__ = manage_changed(dict.__setitem__)\n        __delitem__ = manage_changed(dict.__delitem__)\n\n        # flash API methods\n        @manage_changed\n        def flash(self, msg, queue='', allow_duplicate=True):\n            storage = self.setdefault('_f_' + queue, [])\n            if allow_duplicate or (msg not in storage):\n                storage.append(msg)\n\n        @manage_changed\n        def pop_flash(self, queue=''):\n            storage = self.pop('_f_' + queue, [])\n            return storage\n\n        @manage_accessed\n        def peek_flash(self, queue=''):\n            storage = self.get('_f_' + queue, [])\n            return storage\n\n        # CSRF API methods\n        @manage_changed\n        def new_csrf_token(self):\n            token = text_(binascii.hexlify(os.urandom(20)))\n            self['_csrft_'] = token\n            return token\n\n        @manage_accessed\n        def get_csrf_token(self):\n            token = self.get('_csrft_', None)\n            if token is None:\n                token = self.new_csrf_token()\n            return token\n\n        # non-API methods\n        def _set_cookie(self, response):\n            if not self._cookie_on_exception:\n                exception = getattr(self.request, 'exception', None)\n                if exception is not None: # dont set a cookie during exceptions\n                    return False\n            cookieval = native_(serializer.dumps(\n                (self.accessed, self.created, dict(self))\n                ))\n            if len(cookieval) > 4064:\n                raise ValueError(\n                    'Cookie value is too long to store (%s bytes)' %\n                    len(cookieval)\n                    )\n            response.set_cookie(\n                self._cookie_name,\n                value=cookieval,\n                max_age=self._cookie_max_age,\n                path=self._cookie_path,\n                domain=self._cookie_domain,\n                secure=self._cookie_secure,\n                httponly=self._cookie_httponly,\n                )\n            return True\n\n    return CookieSession\n\n\ndef UnencryptedCookieSessionFactoryConfig(\n    secret,\n    timeout=1200,\n    cookie_name='session',\n    cookie_max_age=None,\n    cookie_path='/',\n    cookie_domain=None,\n    cookie_secure=False,\n    cookie_httponly=False,\n    cookie_on_exception=True,\n    signed_serialize=signed_serialize,\n    signed_deserialize=signed_deserialize,\n    ):\n    \"\"\"\n    .. deprecated:: 1.5\n        Use :func:`pyramid.session.SignedCookieSessionFactory` instead.\n        Caveat: Cookies generated using ``SignedCookieSessionFactory`` are not\n        compatible with cookies generated using\n        ``UnencryptedCookieSessionFactory``, so existing user session data\n        will be destroyed if you switch to it.\n    \n    Configure a :term:`session factory` which will provide unencrypted\n    (but signed) cookie-based sessions.  The return value of this\n    function is a :term:`session factory`, which may be provided as\n    the ``session_factory`` argument of a\n    :class:`pyramid.config.Configurator` constructor, or used\n    as the ``session_factory`` argument of the\n    :meth:`pyramid.config.Configurator.set_session_factory`\n    method.\n\n    The session factory returned by this function will create sessions\n    which are limited to storing fewer than 4000 bytes of data (as the\n    payload must fit into a single cookie).\n\n    Parameters:\n\n    ``secret``\n      A string which is used to sign the cookie.\n\n    ``timeout``\n      A number of seconds of inactivity before a session times out.\n\n    ``cookie_name``\n      The name of the cookie used for sessioning.\n\n    ``cookie_max_age``\n      The maximum age of the cookie used for sessioning (in seconds).\n      Default: ``None`` (browser scope).\n\n    ``cookie_path``\n      The path used for the session cookie.\n\n    ``cookie_domain``\n      The domain used for the session cookie.  Default: ``None`` (no domain).\n\n    ``cookie_secure``\n      The 'secure' flag of the session cookie.\n\n    ``cookie_httponly``\n      The 'httpOnly' flag of the session cookie.\n\n    ``cookie_on_exception``\n      If ``True``, set a session cookie even if an exception occurs\n      while rendering a view.\n\n    ``signed_serialize``\n      A callable which takes more or less arbitrary Python data structure and\n      a secret and returns a signed serialization in bytes.\n      Default: ``signed_serialize`` (using pickle).\n\n    ``signed_deserialize``\n      A callable which takes a signed and serialized data structure in bytes\n      and a secret and returns the original data structure if the signature\n      is valid. Default: ``signed_deserialize`` (using pickle).\n    \"\"\"\n\n    class SerializerWrapper(object):\n        def __init__(self, secret):\n            self.secret = secret\n            \n        def loads(self, bstruct):\n            return signed_deserialize(bstruct, secret)\n\n        def dumps(self, appstruct):\n            return signed_serialize(appstruct, secret)\n\n    serializer = SerializerWrapper(secret)\n\n    return BaseCookieSessionFactory(\n        serializer,\n        cookie_name=cookie_name,\n        max_age=cookie_max_age,\n        path=cookie_path,\n        domain=cookie_domain,\n        secure=cookie_secure,\n        httponly=cookie_httponly,\n        timeout=timeout,\n        reissue_time=0, # to keep session.accessed == session.renewed\n        set_on_exception=cookie_on_exception,\n    )\n\ndeprecated(\n    'UnencryptedCookieSessionFactoryConfig',\n    'The UnencryptedCookieSessionFactoryConfig callable is deprecated as of '\n    'Pyramid 1.5.  Use ``pyramid.session.SignedCookieSessionFactory`` instead. '\n    'Caveat: Cookies generated using SignedCookieSessionFactory are not '\n    'compatible with cookies generated using UnencryptedCookieSessionFactory, '\n    'so existing user session data will be destroyed if you switch to it.'\n    )\n\ndef SignedCookieSessionFactory(\n    secret,\n    cookie_name='session',\n    max_age=None,\n    path='/',\n    domain=None,\n    secure=False,\n    httponly=False,\n    set_on_exception=True,\n    timeout=1200,\n    reissue_time=0,\n    hashalg='sha512',\n    salt='pyramid.session.',\n    serializer=None,\n    ):\n    \"\"\"\n    .. versionadded:: 1.5\n    \n    Configure a :term:`session factory` which will provide signed\n    cookie-based sessions.  The return value of this\n    function is a :term:`session factory`, which may be provided as\n    the ``session_factory`` argument of a\n    :class:`pyramid.config.Configurator` constructor, or used\n    as the ``session_factory`` argument of the\n    :meth:`pyramid.config.Configurator.set_session_factory`\n    method.\n\n    The session factory returned by this function will create sessions\n    which are limited to storing fewer than 4000 bytes of data (as the\n    payload must fit into a single cookie).\n\n    Parameters:\n\n    ``secret``\n      A string which is used to sign the cookie. The secret should be at\n      least as long as the block size of the selected hash algorithm. For\n      ``sha512`` this would mean a 128 bit (64 character) secret.  It should\n      be unique within the set of secret values provided to Pyramid for\n      its various subsystems (see :ref:`admonishment_against_secret_sharing`).\n\n    ``hashalg``\n      The HMAC digest algorithm to use for signing. The algorithm must be\n      supported by the :mod:`hashlib` library. Default: ``'sha512'``.\n\n    ``salt``\n      A namespace to avoid collisions between different uses of a shared\n      secret. Reusing a secret for different parts of an application is\n      strongly discouraged (see :ref:`admonishment_against_secret_sharing`).\n      Default: ``'pyramid.session.'``.\n\n    ``cookie_name``\n      The name of the cookie used for sessioning. Default: ``'session'``.\n\n    ``max_age``\n      The maximum age of the cookie used for sessioning (in seconds).\n      Default: ``None`` (browser scope).\n\n    ``path``\n      The path used for the session cookie. Default: ``'/'``.\n\n    ``domain``\n      The domain used for the session cookie.  Default: ``None`` (no domain).\n\n    ``secure``\n      The 'secure' flag of the session cookie. Default: ``False``.\n\n    ``httponly``\n      Hide the cookie from Javascript by setting the 'HttpOnly' flag of the\n      session cookie. Default: ``False``.\n\n    ``timeout``\n      A number of seconds of inactivity before a session times out. If\n      ``None`` then the cookie never expires. This lifetime only applies\n      to the *value* within the cookie. Meaning that if the cookie expires\n      due to a lower ``max_age``, then this setting has no effect.\n      Default: ``1200``.\n\n    ``reissue_time``\n      The number of seconds that must pass before the cookie is automatically\n      reissued as the result of accessing the session. The\n      duration is measured as the number of seconds since the last session\n      cookie was issued and 'now'.  If this value is ``0``, a new cookie\n      will be reissued on every request accessing the session. If ``None``\n      then the cookie's lifetime will never be extended.\n\n      A good rule of thumb: if you want auto-expired cookies based on\n      inactivity: set the ``timeout`` value to 1200 (20 mins) and set the\n      ``reissue_time`` value to perhaps a tenth of the ``timeout`` value\n      (120 or 2 mins).  It's nonsensical to set the ``timeout`` value lower\n      than the ``reissue_time`` value, as the ticket will never be reissued.\n      However, such a configuration is not explicitly prevented.\n\n      Default: ``0``.\n\n    ``set_on_exception``\n      If ``True``, set a session cookie even if an exception occurs\n      while rendering a view. Default: ``True``.\n\n    ``serializer``\n      An object with two methods: ``loads`` and ``dumps``.  The ``loads`` method\n      should accept bytes and return a Python object.  The ``dumps`` method\n      should accept a Python object and return bytes.  A ``ValueError`` should\n      be raised for malformed inputs.  If a serializer is not passed, the\n      :class:`pyramid.session.PickleSerializer` serializer will be used.\n\n    .. versionadded: 1.5a3\n    \"\"\"\n    if serializer is None:\n        serializer = PickleSerializer()\n\n    signed_serializer = SignedSerializer(\n        secret,\n        salt, \n        hashalg,\n        serializer=serializer,\n        )\n\n    return BaseCookieSessionFactory(\n        signed_serializer,\n        cookie_name=cookie_name,\n        max_age=max_age,\n        path=path,\n        domain=domain,\n        secure=secure,\n        httponly=httponly,\n        timeout=timeout,\n        reissue_time=reissue_time,\n        set_on_exception=set_on_exception,\n    )\n"}
A user will ask you to solve a task. You should first draft your thinking process (inner monologue). Then, generate the solution.

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

**Description:**
When managing session access, if the session's `_reissue_time` attribute is set to `None` or contains an invalid type (e.g., a string), the session handling logic attempts arithmetic operations that result in a `TypeError`. This prevents the session from functioning correctly and can lead to unexpected crashes.

**Example Code:**
```python
import time
from pyramid.session import BaseCookieSessionFactory
from pyramid.testing import DummyRequest

# Dummy serializer for demonstration
class DummySerializer:
    def loads(self, data):
        return data

    def dumps(self, obj):
        return obj

# Serialize function for the example
def serialize(value):
    import json
    return json.dumps(value)

# Create a session factory with _reissue_time set to None
serializer = DummySerializer()
factory = BaseCookieSessionFactory(serializer, reissue_time=None)
request = DummyRequest()
request.cookies['session'] = serialize((int(time.time()), 0, {'user_id': 123}))

# Attempt to access the session
session = factory(request)
user_id = session['user_id']
```

**Expected Behavior:**
The session should handle cases where `_reissue_time` is `None` without raising exceptions. It should allow access to session data seamlessly, maintaining the session state as expected.

**Actual Behavior:**
A `TypeError` is raised during session access because the code attempts to perform arithmetic operations between incompatible types (`int` and `NoneType` or `str`), as shown below:

```
TypeError: '>' not supported between instances of 'int' and 'NoneType'
```
or
```
TypeError: unsupported operand type(s) for -: 'int' and 'str'
```

This error disrupts the normal flow of the application and prevents proper session management.

[/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/session.py
import base64
import binascii
import hashlib
import hmac
import os
import time

from zope.deprecation import deprecated
from zope.interface import implementer

from webob.cookies import SignedSerializer

from pyramid.compat import (
    pickle,
    PY3,
    text_,
    bytes_,
    native_,
    )

from pyramid.exceptions import BadCSRFToken
from pyramid.interfaces import ISession
from pyramid.util import strings_differ

def manage_accessed(wrapped):
    """ Decorator which causes a cookie to be renewed when an accessor
    method is called."""
    def accessed(session, *arg, **kw):
        session.accessed = now = int(time.time())
        if now - session.renewed > session._reissue_time:
            session.changed()
        return wrapped(session, *arg, **kw)
    accessed.__doc__ = wrapped.__doc__
    return accessed

def manage_changed(wrapped):
    """ Decorator which causes a cookie to be set when a setter method
    is called."""
    def changed(session, *arg, **kw):
        session.accessed = int(time.time())
        session.changed()
        return wrapped(session, *arg, **kw)
    changed.__doc__ = wrapped.__doc__
    return changed

def signed_serialize(data, secret):
    """ Serialize any pickleable structure (``data``) and sign it
    using the ``secret`` (must be a string).  Return the
    serialization, which includes the signature as its first 40 bytes.
    The ``signed_deserialize`` method will deserialize such a value.

    This function is useful for creating signed cookies.  For example:

    .. code-block:: python

       cookieval = signed_serialize({'a':1}, 'secret')
       response.set_cookie('signed_cookie', cookieval)
    """
    pickled = pickle.dumps(data, pickle.HIGHEST_PROTOCOL)
    sig = hmac.new(bytes_(secret), pickled, hashlib.sha1).hexdigest()
    return sig + native_(base64.b64encode(pickled))

def signed_deserialize(serialized, secret, hmac=hmac):
    """ Deserialize the value returned from ``signed_serialize``.  If
    the value cannot be deserialized for any reason, a
    :exc:`ValueError` exception will be raised.

    This function is useful for deserializing a signed cookie value
    created by ``signed_serialize``.  For example:

    .. code-block:: python

       cookieval = request.cookies['signed_cookie']
       data = signed_deserialize(cookieval, 'secret')
    """
    # hmac parameterized only for unit tests
    try:
        input_sig, pickled = (bytes_(serialized[:40]),
                              base64.b64decode(bytes_(serialized[40:])))
    except (binascii.Error, TypeError) as e:
        # Badly formed data can make base64 die
        raise ValueError('Badly formed base64 data: %s' % e)

    sig = bytes_(hmac.new(bytes_(secret), pickled, hashlib.sha1).hexdigest())

    # Avoid timing attacks (see
    # http://seb.dbzteam.org/crypto/python-oauth-timing-hmac.pdf)
    if strings_differ(sig, input_sig):
        raise ValueError('Invalid signature')

    return pickle.loads(pickled)

def check_csrf_token(request,
                     token='csrf_token',
                     header='X-CSRF-Token',
                     raises=True):
    """ Check the CSRF token in the request's session against the value in
    ``request.params.get(token)`` or ``request.headers.get(header)``.
    If a ``token`` keyword is not supplied to this function, the string
    ``csrf_token`` will be used to look up the token in ``request.params``.
    If a ``header`` keyword is not supplied to this function, the string
    ``X-CSRF-Token`` will be used to look up the token in ``request.headers``.

    If the value supplied by param or by header doesn't match the value
    supplied by ``request.session.get_csrf_token()``, and ``raises`` is
    ``True``, this function will raise an
    :exc:`pyramid.exceptions.BadCSRFToken` exception.
    If the check does succeed and ``raises`` is ``False``, this
    function will return ``False``.  If the CSRF check is successful, this
    function will return ``True`` unconditionally.

    Note that using this function requires that a :term:`session factory` is
    configured.

    .. versionadded:: 1.4a2
    """
    supplied_token = request.params.get(token, request.headers.get(header))
    if supplied_token != request.session.get_csrf_token():
        if raises:
            raise BadCSRFToken('check_csrf_token(): Invalid token')
        return False
    return True

class PickleSerializer(object):
    """ A Webob cookie serializer that uses the pickle protocol to dump Python
    data to bytes."""
    def loads(self, bstruct):
        return pickle.loads(bstruct)

    def dumps(self, appstruct):
        return pickle.dumps(appstruct, pickle.HIGHEST_PROTOCOL)

def BaseCookieSessionFactory(
    serializer,
    cookie_name='session',
    max_age=None,
    path='/',
    domain=None,
    secure=False,
    httponly=False,
    timeout=1200,
    reissue_time=0,
    set_on_exception=True,
    ):
    """
    .. versionadded:: 1.5
    
    Configure a :term:`session factory` which will provide cookie-based
    sessions.  The return value of this function is a :term:`session factory`,
    which may be provided as the ``session_factory`` argument of a
    :class:`pyramid.config.Configurator` constructor, or used as the
    ``session_factory`` argument of the
    :meth:`pyramid.config.Configurator.set_session_factory` method.

    The session factory returned by this function will create sessions
    which are limited to storing fewer than 4000 bytes of data (as the
    payload must fit into a single cookie).

    .. warning:

       This class provides no protection from tampering and is only intended
       to be used by framework authors to create their own cookie-based
       session factories.

    Parameters:

    ``serializer``
      An object with two methods: ``loads`` and ``dumps``.  The ``loads`` method
      should accept bytes and return a Python object.  The ``dumps`` method
      should accept a Python object and return bytes.  A ``ValueError`` should
      be raised for malformed inputs.

    ``cookie_name``
      The name of the cookie used for sessioning. Default: ``'session'``.

    ``max_age``
      The maximum age of the cookie used for sessioning (in seconds).
      Default: ``None`` (browser scope).

    ``path``
      The path used for the session cookie. Default: ``'/'``.

    ``domain``
      The domain used for the session cookie.  Default: ``None`` (no domain).

    ``secure``
      The 'secure' flag of the session cookie. Default: ``False``.

    ``httponly``
      Hide the cookie from Javascript by setting the 'HttpOnly' flag of the
      session cookie. Default: ``False``.

    ``timeout``
      A number of seconds of inactivity before a session times out. If
      ``None`` then the cookie never expires. This lifetime only applies
      to the *value* within the cookie. Meaning that if the cookie expires
      due to a lower ``max_age``, then this setting has no effect.
      Default: ``1200``.

    ``reissue_time``
      The number of seconds that must pass before the cookie is automatically
      reissued as the result of a request which accesses the session. The
      duration is measured as the number of seconds since the last session
      cookie was issued and 'now'.  If this value is ``0``, a new cookie
      will be reissued on every request accessing the session. If ``None``
      then the cookie's lifetime will never be extended.

      A good rule of thumb: if you want auto-expired cookies based on
      inactivity: set the ``timeout`` value to 1200 (20 mins) and set the
      ``reissue_time`` value to perhaps a tenth of the ``timeout`` value
      (120 or 2 mins).  It's nonsensical to set the ``timeout`` value lower
      than the ``reissue_time`` value, as the ticket will never be reissued.
      However, such a configuration is not explicitly prevented.

      Default: ``0``.

    ``set_on_exception``
      If ``True``, set a session cookie even if an exception occurs
      while rendering a view. Default: ``True``.

    .. versionadded: 1.5a3
    """

    @implementer(ISession)
    class CookieSession(dict):
        """ Dictionary-like session object """

        # configuration parameters
        _cookie_name = cookie_name
        _cookie_max_age = max_age
        _cookie_path = path
        _cookie_domain = domain
        _cookie_secure = secure
        _cookie_httponly = httponly
        _cookie_on_exception = set_on_exception
        _timeout = timeout
        _reissue_time = reissue_time

        # dirty flag
        _dirty = False

        def __init__(self, request):
            self.request = request
            now = time.time()
            created = renewed = now
            new = True
            value = None
            state = {}
            cookieval = request.cookies.get(self._cookie_name)
            if cookieval is not None:
                try:
                    value = serializer.loads(bytes_(cookieval))
                except ValueError:
                    # the cookie failed to deserialize, dropped
                    value = None

            if value is not None:
                try:
                    renewed, created, state = value
                    new = False
                    if now - renewed > self._timeout:
                        # expire the session because it was not renewed
                        # before the timeout threshold
                        state = {}
                except TypeError:
                    # value failed to unpack properly or renewed was not
                    # a numeric type so we'll fail deserialization here
                    state = {}

            self.created = created
            self.accessed = renewed
            self.renewed = renewed
            self.new = new
            dict.__init__(self, state)

        # ISession methods
        def changed(self):
            if not self._dirty:
                self._dirty = True
                def set_cookie_callback(request, response):
                    self._set_cookie(response)
                    self.request = None # explicitly break cycle for gc
                self.request.add_response_callback(set_cookie_callback)

        def invalidate(self):
            self.clear() # XXX probably needs to unset cookie

        # non-modifying dictionary methods
        get = manage_accessed(dict.get)
        __getitem__ = manage_accessed(dict.__getitem__)
        items = manage_accessed(dict.items)
        values = manage_accessed(dict.values)
        keys = manage_accessed(dict.keys)
        __contains__ = manage_accessed(dict.__contains__)
        __len__ = manage_accessed(dict.__len__)
        __iter__ = manage_accessed(dict.__iter__)

        if not PY3:
            iteritems = manage_accessed(dict.iteritems)
            itervalues = manage_accessed(dict.itervalues)
            iterkeys = manage_accessed(dict.iterkeys)
            has_key = manage_accessed(dict.has_key)

        # modifying dictionary methods
        clear = manage_changed(dict.clear)
        update = manage_changed(dict.update)
        setdefault = manage_changed(dict.setdefault)
        pop = manage_changed(dict.pop)
        popitem = manage_changed(dict.popitem)
        __setitem__ = manage_changed(dict.__setitem__)
        __delitem__ = manage_changed(dict.__delitem__)

        # flash API methods
        @manage_changed
        def flash(self, msg, queue='', allow_duplicate=True):
            storage = self.setdefault('_f_' + queue, [])
            if allow_duplicate or (msg not in storage):
                storage.append(msg)

        @manage_changed
        def pop_flash(self, queue=''):
            storage = self.pop('_f_' + queue, [])
            return storage

        @manage_accessed
        def peek_flash(self, queue=''):
            storage = self.get('_f_' + queue, [])
            return storage

        # CSRF API methods
        @manage_changed
        def new_csrf_token(self):
            token = text_(binascii.hexlify(os.urandom(20)))
            self['_csrft_'] = token
            return token

        @manage_accessed
        def get_csrf_token(self):
            token = self.get('_csrft_', None)
            if token is None:
                token = self.new_csrf_token()
            return token

        # non-API methods
        def _set_cookie(self, response):
            if not self._cookie_on_exception:
                exception = getattr(self.request, 'exception', None)
                if exception is not None: # dont set a cookie during exceptions
                    return False
            cookieval = native_(serializer.dumps(
                (self.accessed, self.created, dict(self))
                ))
            if len(cookieval) > 4064:
                raise ValueError(
                    'Cookie value is too long to store (%s bytes)' %
                    len(cookieval)
                    )
            response.set_cookie(
                self._cookie_name,
                value=cookieval,
                max_age=self._cookie_max_age,
                path=self._cookie_path,
                domain=self._cookie_domain,
                secure=self._cookie_secure,
                httponly=self._cookie_httponly,
                )
            return True

    return CookieSession


def UnencryptedCookieSessionFactoryConfig(
    secret,
    timeout=1200,
    cookie_name='session',
    cookie_max_age=None,
    cookie_path='/',
    cookie_domain=None,
    cookie_secure=False,
    cookie_httponly=False,
    cookie_on_exception=True,
    signed_serialize=signed_serialize,
    signed_deserialize=signed_deserialize,
    ):
    """
    .. deprecated:: 1.5
        Use :func:`pyramid.session.SignedCookieSessionFactory` instead.
        Caveat: Cookies generated using ``SignedCookieSessionFactory`` are not
        compatible with cookies generated using
        ``UnencryptedCookieSessionFactory``, so existing user session data
        will be destroyed if you switch to it.
    
    Configure a :term:`session factory` which will provide unencrypted
    (but signed) cookie-based sessions.  The return value of this
    function is a :term:`session factory`, which may be provided as
    the ``session_factory`` argument of a
    :class:`pyramid.config.Configurator` constructor, or used
    as the ``session_factory`` argument of the
    :meth:`pyramid.config.Configurator.set_session_factory`
    method.

    The session factory returned by this function will create sessions
    which are limited to storing fewer than 4000 bytes of data (as the
    payload must fit into a single cookie).

    Parameters:

    ``secret``
      A string which is used to sign the cookie.

    ``timeout``
      A number of seconds of inactivity before a session times out.

    ``cookie_name``
      The name of the cookie used for sessioning.

    ``cookie_max_age``
      The maximum age of the cookie used for sessioning (in seconds).
      Default: ``None`` (browser scope).

    ``cookie_path``
      The path used for the session cookie.

    ``cookie_domain``
      The domain used for the session cookie.  Default: ``None`` (no domain).

    ``cookie_secure``
      The 'secure' flag of the session cookie.

    ``cookie_httponly``
      The 'httpOnly' flag of the session cookie.

    ``cookie_on_exception``
      If ``True``, set a session cookie even if an exception occurs
      while rendering a view.

    ``signed_serialize``
      A callable which takes more or less arbitrary Python data structure and
      a secret and returns a signed serialization in bytes.
      Default: ``signed_serialize`` (using pickle).

    ``signed_deserialize``
      A callable which takes a signed and serialized data structure in bytes
      and a secret and returns the original data structure if the signature
      is valid. Default: ``signed_deserialize`` (using pickle).
    """

    class SerializerWrapper(object):
        def __init__(self, secret):
            self.secret = secret
            
        def loads(self, bstruct):
            return signed_deserialize(bstruct, secret)

        def dumps(self, appstruct):
            return signed_serialize(appstruct, secret)

    serializer = SerializerWrapper(secret)

    return BaseCookieSessionFactory(
        serializer,
        cookie_name=cookie_name,
        max_age=cookie_max_age,
        path=cookie_path,
        domain=cookie_domain,
        secure=cookie_secure,
        httponly=cookie_httponly,
        timeout=timeout,
        reissue_time=0, # to keep session.accessed == session.renewed
        set_on_exception=cookie_on_exception,
    )

deprecated(
    'UnencryptedCookieSessionFactoryConfig',
    'The UnencryptedCookieSessionFactoryConfig callable is deprecated as of '
    'Pyramid 1.5.  Use ``pyramid.session.SignedCookieSessionFactory`` instead. '
    'Caveat: Cookies generated using SignedCookieSessionFactory are not '
    'compatible with cookies generated using UnencryptedCookieSessionFactory, '
    'so existing user session data will be destroyed if you switch to it.'
    )

def SignedCookieSessionFactory(
    secret,
    cookie_name='session',
    max_age=None,
    path='/',
    domain=None,
    secure=False,
    httponly=False,
    set_on_exception=True,
    timeout=1200,
    reissue_time=0,
    hashalg='sha512',
    salt='pyramid.session.',
    serializer=None,
    ):
    """
    .. versionadded:: 1.5
    
    Configure a :term:`session factory` which will provide signed
    cookie-based sessions.  The return value of this
    function is a :term:`session factory`, which may be provided as
    the ``session_factory`` argument of a
    :class:`pyramid.config.Configurator` constructor, or used
    as the ``session_factory`` argument of the
    :meth:`pyramid.config.Configurator.set_session_factory`
    method.

    The session factory returned by this function will create sessions
    which are limited to storing fewer than 4000 bytes of data (as the
    payload must fit into a single cookie).

    Parameters:

    ``secret``
      A string which is used to sign the cookie. The secret should be at
      least as long as the block size of the selected hash algorithm. For
      ``sha512`` this would mean a 128 bit (64 character) secret.  It should
      be unique within the set of secret values provided to Pyramid for
      its various subsystems (see :ref:`admonishment_against_secret_sharing`).

    ``hashalg``
      The HMAC digest algorithm to use for signing. The algorithm must be
      supported by the :mod:`hashlib` library. Default: ``'sha512'``.

    ``salt``
      A namespace to avoid collisions between different uses of a shared
      secret. Reusing a secret for different parts of an application is
      strongly discouraged (see :ref:`admonishment_against_secret_sharing`).
      Default: ``'pyramid.session.'``.

    ``cookie_name``
      The name of the cookie used for sessioning. Default: ``'session'``.

    ``max_age``
      The maximum age of the cookie used for sessioning (in seconds).
      Default: ``None`` (browser scope).

    ``path``
      The path used for the session cookie. Default: ``'/'``.

    ``domain``
      The domain used for the session cookie.  Default: ``None`` (no domain).

    ``secure``
      The 'secure' flag of the session cookie. Default: ``False``.

    ``httponly``
      Hide the cookie from Javascript by setting the 'HttpOnly' flag of the
      session cookie. Default: ``False``.

    ``timeout``
      A number of seconds of inactivity before a session times out. If
      ``None`` then the cookie never expires. This lifetime only applies
      to the *value* within the cookie. Meaning that if the cookie expires
      due to a lower ``max_age``, then this setting has no effect.
      Default: ``1200``.

    ``reissue_time``
      The number of seconds that must pass before the cookie is automatically
      reissued as the result of accessing the session. The
      duration is measured as the number of seconds since the last session
      cookie was issued and 'now'.  If this value is ``0``, a new cookie
      will be reissued on every request accessing the session. If ``None``
      then the cookie's lifetime will never be extended.

      A good rule of thumb: if you want auto-expired cookies based on
      inactivity: set the ``timeout`` value to 1200 (20 mins) and set the
      ``reissue_time`` value to perhaps a tenth of the ``timeout`` value
      (120 or 2 mins).  It's nonsensical to set the ``timeout`` value lower
      than the ``reissue_time`` value, as the ticket will never be reissued.
      However, such a configuration is not explicitly prevented.

      Default: ``0``.

    ``set_on_exception``
      If ``True``, set a session cookie even if an exception occurs
      while rendering a view. Default: ``True``.

    ``serializer``
      An object with two methods: ``loads`` and ``dumps``.  The ``loads`` method
      should accept bytes and return a Python object.  The ``dumps`` method
      should accept a Python object and return bytes.  A ``ValueError`` should
      be raised for malformed inputs.  If a serializer is not passed, the
      :class:`pyramid.session.PickleSerializer` serializer will be used.

    .. versionadded: 1.5a3
    """
    if serializer is None:
        serializer = PickleSerializer()

    signed_serializer = SignedSerializer(
        secret,
        salt, 
        hashalg,
        serializer=serializer,
        )

    return BaseCookieSessionFactory(
        signed_serializer,
        cookie_name=cookie_name,
        max_age=max_age,
        path=path,
        domain=domain,
        secure=secure,
        httponly=httponly,
        timeout=timeout,
        reissue_time=reissue_time,
        set_on_exception=set_on_exception,
    )

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