{
    "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    PY2,\n    text_,\n    bytes_,\n    native_,\n    )\nfrom pyramid.csrf import (\n    check_csrf_origin,\n    check_csrf_token,\n)\n\nfrom pyramid.interfaces import ISession\nfrom pyramid.util import strings_differ\n\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    try:\n        # bw-compat with pyramid <= 1.5b1 where latin1 is the default\n        secret = bytes_(secret)\n    except UnicodeEncodeError:\n        secret = bytes_(secret, 'utf-8')\n    sig = hmac.new(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    try:\n        # bw-compat with pyramid <= 1.5b1 where latin1 is the default\n        secret = bytes_(secret)\n    except UnicodeEncodeError:\n        secret = bytes_(secret, 'utf-8')\n    sig = bytes_(hmac.new(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\n\nclass PickleSerializer(object):\n    \"\"\" A serializer that uses the pickle protocol to dump Python\n    data to bytes.\n\n    This is the default serializer used by Pyramid.\n\n    ``protocol`` may be specified to control the version of pickle used.\n    Defaults to :attr:`pickle.HIGHEST_PROTOCOL`.\n\n    \"\"\"\n    def __init__(self, protocol=pickle.HIGHEST_PROTOCOL):\n        self.protocol = protocol\n\n    def loads(self, bstruct):\n        \"\"\"Accept bytes and return a Python object.\"\"\"\n        return pickle.loads(bstruct)\n\n    def dumps(self, appstruct):\n        \"\"\"Accept a Python object and return bytes.\"\"\"\n        return pickle.dumps(appstruct, self.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    samesite='Lax',\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    ``samesite``\n      The 'samesite' option of the session cookie. Set the value to ``None``\n      to turn off the samesite option.  Default: ``'Lax'``.\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    .. versionchanged: 1.10\n\n       Added the ``samesite`` option and made the default ``'Lax'``.\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 if max_age is None else int(max_age)\n        _cookie_path = path\n        _cookie_domain = domain\n        _cookie_secure = secure\n        _cookie_httponly = httponly\n        _cookie_samesite = samesite\n        _cookie_on_exception = set_on_exception\n        _timeout = timeout if timeout is None else int(timeout)\n        _reissue_time = reissue_time if reissue_time is None else int(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 PY2:\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                samesite=self._cookie_samesite,\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_samesite='Lax',\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_samesite``\n      The 'samesite' option of the session cookie. Set the value to ``None``\n      to turn off the samesite option.  Default: ``'Lax'``.\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    .. versionchanged: 1.10\n\n       Added the ``samesite`` option and made the default ``'Lax'``.\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        samesite=cookie_samesite,\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    samesite='Lax',\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 512 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    ``samesite``\n      The 'samesite' option of the session cookie. Set the value to ``None``\n      to turn off the samesite option.  Default: ``'Lax'``.\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    .. versionchanged: 1.10\n\n       Added the ``samesite`` option and made the default ``Lax``.\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        samesite=samesite,\n        timeout=timeout,\n        reissue_time=reissue_time,\n        set_on_exception=set_on_exception,\n    )\n\ncheck_csrf_origin = check_csrf_origin  # api\ndeprecated('check_csrf_origin',\n           'pyramid.session.check_csrf_origin is deprecated as of Pyramid '\n           '1.9. Use pyramid.csrf.check_csrf_origin instead.')\n\ncheck_csrf_token = check_csrf_token  # api\ndeprecated('check_csrf_token',\n           'pyramid.session.check_csrf_token is deprecated as of Pyramid '\n           '1.9. Use pyramid.csrf.check_csrf_token instead.')\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    PY2,\n    text_,\n    bytes_,\n    native_,\n    )\nfrom pyramid.csrf import (\n    check_csrf_origin,\n    check_csrf_token,\n)\n\nfrom pyramid.interfaces import ISession\nfrom pyramid.util import strings_differ\n\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    try:\n        # bw-compat with pyramid <= 1.5b1 where latin1 is the default\n        secret = bytes_(secret)\n    except UnicodeEncodeError:\n        secret = bytes_(secret, 'utf-8')\n    sig = hmac.new(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    try:\n        # bw-compat with pyramid <= 1.5b1 where latin1 is the default\n        secret = bytes_(secret)\n    except UnicodeEncodeError:\n        secret = bytes_(secret, 'utf-8')\n    sig = bytes_(hmac.new(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\n\nclass PickleSerializer(object):\n    \"\"\" A serializer that uses the pickle protocol to dump Python\n    data to bytes.\n\n    This is the default serializer used by Pyramid.\n\n    ``protocol`` may be specified to control the version of pickle used.\n    Defaults to :attr:`pickle.HIGHEST_PROTOCOL`.\n\n    \"\"\"\n    def __init__(self, protocol=pickle.HIGHEST_PROTOCOL):\n        self.protocol = protocol\n\n    def loads(self, bstruct):\n        \"\"\"Accept bytes and return a Python object.\"\"\"\n        try:\n            return pickle.loads(bstruct)\n        # at least ValueError, AttributeError, ImportError but more to be safe\n        except Exception:\n            raise ValueError\n\n    def dumps(self, appstruct):\n        \"\"\"Accept a Python object and return bytes.\"\"\"\n        return pickle.dumps(appstruct, self.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    samesite='Lax',\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    ``samesite``\n      The 'samesite' option of the session cookie. Set the value to ``None``\n      to turn off the samesite option.  Default: ``'Lax'``.\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    .. versionchanged: 1.10\n\n       Added the ``samesite`` option and made the default ``'Lax'``.\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 if max_age is None else int(max_age)\n        _cookie_path = path\n        _cookie_domain = domain\n        _cookie_secure = secure\n        _cookie_httponly = httponly\n        _cookie_samesite = samesite\n        _cookie_on_exception = set_on_exception\n        _timeout = timeout if timeout is None else int(timeout)\n        _reissue_time = reissue_time if reissue_time is None else int(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 PY2:\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                samesite=self._cookie_samesite,\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_samesite='Lax',\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_samesite``\n      The 'samesite' option of the session cookie. Set the value to ``None``\n      to turn off the samesite option.  Default: ``'Lax'``.\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    .. versionchanged: 1.10\n\n       Added the ``samesite`` option and made the default ``'Lax'``.\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        samesite=cookie_samesite,\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    samesite='Lax',\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 512 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    ``samesite``\n      The 'samesite' option of the session cookie. Set the value to ``None``\n      to turn off the samesite option.  Default: ``'Lax'``.\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    .. versionchanged: 1.10\n\n       Added the ``samesite`` option and made the default ``Lax``.\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        samesite=samesite,\n        timeout=timeout,\n        reissue_time=reissue_time,\n        set_on_exception=set_on_exception,\n    )\n\ncheck_csrf_origin = check_csrf_origin  # api\ndeprecated('check_csrf_origin',\n           'pyramid.session.check_csrf_origin is deprecated as of Pyramid '\n           '1.9. Use pyramid.csrf.check_csrf_origin instead.')\n\ncheck_csrf_token = check_csrf_token  # api\ndeprecated('check_csrf_token',\n           'pyramid.session.check_csrf_token is deprecated as of Pyramid '\n           '1.9. Use pyramid.csrf.check_csrf_token instead.')\n",
            "header": {
                "file": {
                    "path": "pyramid/session.py"
                },
                "misc_line": null
            },
            "index_line": {
                "old_commit_hash": "d05ac66eb",
                "new_commit_hash": "97039a404",
                "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": 121,
                            "length": 7
                        },
                        "new_range": {
                            "start": 121,
                            "length": 11
                        },
                        "section": "class PickleSerializer(object):"
                    },
                    "line_group": {
                        "all_lines": [
                            {
                                "content": "",
                                "type": "context"
                            },
                            {
                                "content": "    def loads(self, bstruct):",
                                "type": "context"
                            },
                            {
                                "content": "        \"\"\"Accept bytes and return a Python object.\"\"\"",
                                "type": "context"
                            },
                            {
                                "content": "        return pickle.loads(bstruct)",
                                "type": "deleted"
                            },
                            {
                                "content": "        try:",
                                "type": "added"
                            },
                            {
                                "content": "            return pickle.loads(bstruct)",
                                "type": "added"
                            },
                            {
                                "content": "        # at least ValueError, AttributeError, ImportError but more to be safe",
                                "type": "added"
                            },
                            {
                                "content": "        except Exception:",
                                "type": "added"
                            },
                            {
                                "content": "            raise ValueError",
                                "type": "added"
                            },
                            {
                                "content": "",
                                "type": "context"
                            },
                            {
                                "content": "    def dumps(self, appstruct):",
                                "type": "context"
                            },
                            {
                                "content": "        \"\"\"Accept a Python object and return bytes.\"\"\"",
                                "type": "context"
                            }
                        ]
                    },
                    "modified_entities": [
                        {
                            "file_name": "pyramid/session.py",
                            "type": "method",
                            "name": "PickleSerializer.loads",
                            "content": "class PickleSerializer(object):\n    \"\"\" A serializer that uses the pickle protocol to dump Python\n    data to bytes.\n\n    This is the default serializer used by Pyramid.\n\n    ``protocol`` may be specified to control the version of pickle used.\n    Defaults to :attr:`pickle.HIGHEST_PROTOCOL`.\n\n    \"\"\"\n    def __init__(self, protocol=pickle.HIGHEST_PROTOCOL):\n        self.protocol = protocol\n\n    def loads(self, bstruct):\n        \"\"\"Accept bytes and return a Python object.\"\"\"\n        return pickle.loads(bstruct)\n\n    def dumps(self, appstruct):\n        \"\"\"Accept a Python object and return bytes.\"\"\"\n        return pickle.dumps(appstruct, self.protocol)",
                            "ast_type_str": "ClassDef",
                            "start_lineno": 122,
                            "end_lineno": 124,
                            "parent": {
                                "file_name": "pyramid/session.py",
                                "type": "class",
                                "name": "PickleSerializer",
                                "content": "class PickleSerializer(object):\n    \"\"\" A serializer that uses the pickle protocol to dump Python\n    data to bytes.\n\n    This is the default serializer used by Pyramid.\n\n    ``protocol`` may be specified to control the version of pickle used.\n    Defaults to :attr:`pickle.HIGHEST_PROTOCOL`.\n\n    \"\"\"\n    def __init__(self, protocol=pickle.HIGHEST_PROTOCOL):\n        self.protocol = protocol\n\n    def loads(self, bstruct):\n        \"\"\"Accept bytes and return a Python object.\"\"\"\n        return pickle.loads(bstruct)\n\n    def dumps(self, appstruct):\n        \"\"\"Accept a Python object and return bytes.\"\"\"\n        return pickle.dumps(appstruct, self.protocol)",
                                "ast_type_str": "ClassDef",
                                "start_lineno": 109,
                                "end_lineno": 128,
                                "parent": null
                            }
                        },
                        {
                            "file_name": "pyramid/session.py",
                            "type": "class",
                            "name": "PickleSerializer",
                            "content": "class PickleSerializer(object):\n    \"\"\" A serializer that uses the pickle protocol to dump Python\n    data to bytes.\n\n    This is the default serializer used by Pyramid.\n\n    ``protocol`` may be specified to control the version of pickle used.\n    Defaults to :attr:`pickle.HIGHEST_PROTOCOL`.\n\n    \"\"\"\n    def __init__(self, protocol=pickle.HIGHEST_PROTOCOL):\n        self.protocol = protocol\n\n    def loads(self, bstruct):\n        \"\"\"Accept bytes and return a Python object.\"\"\"\n        return pickle.loads(bstruct)\n\n    def dumps(self, appstruct):\n        \"\"\"Accept a Python object and return bytes.\"\"\"\n        return pickle.dumps(appstruct, self.protocol)",
                            "ast_type_str": "ClassDef",
                            "start_lineno": 109,
                            "end_lineno": 128,
                            "parent": null
                        }
                    ],
                    "added_entities": [],
                    "deleted_entities": []
                }
            ]
        },
        {
            "old_file_content": "import base64\nimport 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_timeout_str(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_invalid(self):\n        request = testing.DummyRequest()\n        self.assertRaises(ValueError, self._makeOne, request, timeout='Invalid value')\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, samesite = [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        self.assertEqual(samesite, 'SameSite=Lax')\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 base64.b64encode(json.dumps(value).encode('utf-8'))\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_reissue_str_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, reissue_time='0')\n        self.assertEqual(session['state'], 1)\n        self.assertTrue(session._dirty)\n\n    def test_reissue_invalid(self):\n        request = testing.DummyRequest()\n        self.assertRaises(ValueError, self._makeOne, request, reissue_time='invalid value')\n\n    def test_cookie_max_age_invalid(self):\n        request = testing.DummyRequest()\n        self.assertRaises(ValueError, self._makeOne, request, max_age='invalid value')\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_reissue_str_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, reissue_time='0')\n        self.assertEqual(session['state'], 1)\n        self.assertTrue(session._dirty)\n\n    def test_reissue_invalid(self):\n        request = testing.DummyRequest()\n        self.assertRaises(ValueError, self._makeOne, request, reissue_time='invalid value')\n\n    def test_cookie_max_age_invalid(self):\n        request = testing.DummyRequest()\n        self.assertRaises(ValueError, self._makeOne, request, max_age='invalid value')\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, samesite='Lax')\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        if callbacks is not None: 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, 'utf-8'), 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\n    def test_it_with_highorder_secret(self):\n        secret = b'\\xce\\xb1\\xce\\xb2\\xce\\xb3\\xce\\xb4'.decode('utf-8')\n        expected = serialize('123', secret)\n        result = self._callFUT('123', secret)\n        self.assertEqual(result, expected)\n\n    def test_it_with_latin1_secret(self):\n        secret = b'La Pe\\xc3\\xb1a'\n        expected = serialize('123', secret)\n        result = self._callFUT('123', secret.decode('latin-1'))\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\n    def test_it_with_highorder_secret(self):\n        secret = b'\\xce\\xb1\\xce\\xb2\\xce\\xb3\\xce\\xb4'.decode('utf-8')\n        serialized = serialize('123', secret)\n        result = self._callFUT(serialized, secret)\n        self.assertEqual(result, '123')\n\n    # bwcompat with pyramid <= 1.5b1 where latin1 is the default\n    def test_it_with_latin1_secret(self):\n        secret = b'La Pe\\xc3\\xb1a'\n        serialized = serialize('123', secret)\n        result = self._callFUT(serialized, secret.decode('latin-1'))\n        self.assertEqual(result, '123')\n\n\nclass DummySerializer(object):\n    def dumps(self, value):\n        return base64.b64encode(json.dumps(value).encode('utf-8'))\n\n    def loads(self, value):\n        try:\n            return json.loads(base64.b64decode(value).decode('utf-8'))\n\n        # base64.b64decode raises a TypeError on py2 instead of a ValueError\n        # and a ValueError is required for the session to handle it properly\n        except TypeError:\n            raise ValueError\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 base64\nimport json\nimport unittest\nfrom pyramid import testing\nfrom pyramid.compat import pickle\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_timeout_str(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_invalid(self):\n        request = testing.DummyRequest()\n        self.assertRaises(ValueError, self._makeOne, request, timeout='Invalid value')\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, samesite = [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        self.assertEqual(samesite, 'SameSite=Lax')\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 base64.b64encode(json.dumps(value).encode('utf-8'))\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_reissue_str_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, reissue_time='0')\n        self.assertEqual(session['state'], 1)\n        self.assertTrue(session._dirty)\n\n    def test_reissue_invalid(self):\n        request = testing.DummyRequest()\n        self.assertRaises(ValueError, self._makeOne, request, reissue_time='invalid value')\n\n    def test_cookie_max_age_invalid(self):\n        request = testing.DummyRequest()\n        self.assertRaises(ValueError, self._makeOne, request, max_age='invalid value')\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_reissue_str_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, reissue_time='0')\n        self.assertEqual(session['state'], 1)\n        self.assertTrue(session._dirty)\n\n    def test_reissue_invalid(self):\n        request = testing.DummyRequest()\n        self.assertRaises(ValueError, self._makeOne, request, reissue_time='invalid value')\n\n    def test_cookie_max_age_invalid(self):\n        request = testing.DummyRequest()\n        self.assertRaises(ValueError, self._makeOne, request, max_age='invalid value')\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\n    def test_bad_pickle(self):\n        import base64\n        import hashlib\n        import hmac\n\n        digestmod = lambda: hashlib.new('sha512')\n        # generated from dumping an object that cannot be found anymore, eg:\n        # class Foo: pass\n        # print(pickle.dumps(Foo()))\n        cstruct = b'(i__main__\\nFoo\\np0\\n(dp1\\nb.'\n        sig = hmac.new(b'pyramid.session.secret', cstruct, digestmod).digest()\n        cookieval = base64.urlsafe_b64encode(sig + cstruct).rstrip(b'=')\n\n        request = testing.DummyRequest()\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, secret='secret')\n        self.assertEqual(session, {})\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, samesite='Lax')\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        if callbacks is not None: 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, 'utf-8'), 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\n    def test_it_with_highorder_secret(self):\n        secret = b'\\xce\\xb1\\xce\\xb2\\xce\\xb3\\xce\\xb4'.decode('utf-8')\n        expected = serialize('123', secret)\n        result = self._callFUT('123', secret)\n        self.assertEqual(result, expected)\n\n    def test_it_with_latin1_secret(self):\n        secret = b'La Pe\\xc3\\xb1a'\n        expected = serialize('123', secret)\n        result = self._callFUT('123', secret.decode('latin-1'))\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\n    def test_it_with_highorder_secret(self):\n        secret = b'\\xce\\xb1\\xce\\xb2\\xce\\xb3\\xce\\xb4'.decode('utf-8')\n        serialized = serialize('123', secret)\n        result = self._callFUT(serialized, secret)\n        self.assertEqual(result, '123')\n\n    # bwcompat with pyramid <= 1.5b1 where latin1 is the default\n    def test_it_with_latin1_secret(self):\n        secret = b'La Pe\\xc3\\xb1a'\n        serialized = serialize('123', secret)\n        result = self._callFUT(serialized, secret.decode('latin-1'))\n        self.assertEqual(result, '123')\n\n\nclass TestPickleSerializer(unittest.TestCase):\n    def _makeOne(self):\n        from pyramid.session import PickleSerializer\n        return PickleSerializer()\n\n    def test_loads(self):\n        # generated from dumping Dummy() using protocol=2\n        cstruct = b'\\x80\\x02cpyramid.tests.test_session\\nDummy\\nq\\x00)\\x81q\\x01.'\n        serializer = self._makeOne()\n        result = serializer.loads(cstruct)\n        self.assertIsInstance(result, Dummy)\n\n    def test_loads_raises_ValueError_on_invalid_data(self):\n        cstruct = b'not pickled'\n        serializer = self._makeOne()\n        self.assertRaises(ValueError, serializer.loads, cstruct)\n\n    def test_loads_raises_ValueError_on_bad_import(self):\n        # generated from dumping an object that cannot be found anymore, eg:\n        # class Foo: pass\n        # print(pickle.dumps(Foo()))\n        cstruct = b'(i__main__\\nFoo\\np0\\n(dp1\\nb.'\n        serializer = self._makeOne()\n        self.assertRaises(ValueError, serializer.loads, cstruct)\n\n    def test_dumps(self):\n        obj = Dummy()\n        serializer = self._makeOne()\n        result = serializer.dumps(obj)\n        expected_result = pickle.dumps(obj, protocol=pickle.HIGHEST_PROTOCOL)\n        self.assertEqual(result, expected_result)\n        self.assertIsInstance(result, bytes)\n\n\nclass Dummy(object):\n    pass\n\n\nclass DummySerializer(object):\n    def dumps(self, value):\n        return base64.b64encode(json.dumps(value).encode('utf-8'))\n\n    def loads(self, value):\n        try:\n            return json.loads(base64.b64decode(value).decode('utf-8'))\n\n        # base64.b64decode raises a TypeError on py2 instead of a ValueError\n        # and a ValueError is required for the session to handle it properly\n        except TypeError:\n            raise ValueError\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": "e3d819944",
                "new_commit_hash": "3585ed635",
                "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": 2,
                            "length": 6
                        },
                        "new_range": {
                            "start": 2,
                            "length": 7
                        },
                        "section": "import base64"
                    },
                    "line_group": {
                        "all_lines": [
                            {
                                "content": "import json",
                                "type": "context"
                            },
                            {
                                "content": "import unittest",
                                "type": "context"
                            },
                            {
                                "content": "from pyramid import testing",
                                "type": "context"
                            },
                            {
                                "content": "from pyramid.compat import pickle",
                                "type": "added"
                            },
                            {
                                "content": "",
                                "type": "context"
                            },
                            {
                                "content": "class SharedCookieSessionTests(object):",
                                "type": "context"
                            },
                            {
                                "content": "",
                                "type": "context"
                            }
                        ]
                    },
                    "modified_entities": [],
                    "added_entities": [
                        {
                            "file_name": "pyramid/tests/test_session.py",
                            "type": "statement",
                            "name": "",
                            "content": "from pyramid.compat import pickle",
                            "ast_type_str": "ImportFrom",
                            "start_lineno": 5,
                            "end_lineno": 5,
                            "parent": null
                        }
                    ],
                    "deleted_entities": []
                },
                {
                    "descriptor": {
                        "old_range": {
                            "start": 462,
                            "length": 6
                        },
                        "new_range": {
                            "start": 463,
                            "length": 24
                        },
                        "section": "class TestSignedCookieSession(SharedCookieSessionTests, unittest.TestCase):"
                    },
                    "line_group": {
                        "all_lines": [
                            {
                                "content": "        self.assertEqual(result, None)",
                                "type": "context"
                            },
                            {
                                "content": "        self.assertTrue('Set-Cookie' in dict(response.headerlist))",
                                "type": "context"
                            },
                            {
                                "content": "",
                                "type": "context"
                            },
                            {
                                "content": "    def test_bad_pickle(self):",
                                "type": "added"
                            },
                            {
                                "content": "        import base64",
                                "type": "added"
                            },
                            {
                                "content": "        import hashlib",
                                "type": "added"
                            },
                            {
                                "content": "        import hmac",
                                "type": "added"
                            },
                            {
                                "content": "",
                                "type": "added"
                            },
                            {
                                "content": "        digestmod = lambda: hashlib.new('sha512')",
                                "type": "added"
                            },
                            {
                                "content": "        # generated from dumping an object that cannot be found anymore, eg:",
                                "type": "added"
                            },
                            {
                                "content": "        # class Foo: pass",
                                "type": "added"
                            },
                            {
                                "content": "        # print(pickle.dumps(Foo()))",
                                "type": "added"
                            },
                            {
                                "content": "        cstruct = b'(i__main__\\nFoo\\np0\\n(dp1\\nb.'",
                                "type": "added"
                            },
                            {
                                "content": "        sig = hmac.new(b'pyramid.session.secret', cstruct, digestmod).digest()",
                                "type": "added"
                            },
                            {
                                "content": "        cookieval = base64.urlsafe_b64encode(sig + cstruct).rstrip(b'=')",
                                "type": "added"
                            },
                            {
                                "content": "",
                                "type": "added"
                            },
                            {
                                "content": "        request = testing.DummyRequest()",
                                "type": "added"
                            },
                            {
                                "content": "        request.cookies['session'] = cookieval",
                                "type": "added"
                            },
                            {
                                "content": "        session = self._makeOne(request, secret='secret')",
                                "type": "added"
                            },
                            {
                                "content": "        self.assertEqual(session, {})",
                                "type": "added"
                            },
                            {
                                "content": "",
                                "type": "added"
                            },
                            {
                                "content": "class TestUnencryptedCookieSession(SharedCookieSessionTests, unittest.TestCase):",
                                "type": "context"
                            },
                            {
                                "content": "    def setUp(self):",
                                "type": "context"
                            },
                            {
                                "content": "        super(TestUnencryptedCookieSession, self).setUp()",
                                "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_reissue_str_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, reissue_time='0')\n        self.assertEqual(session['state'], 1)\n        self.assertTrue(session._dirty)\n\n    def test_reissue_invalid(self):\n        request = testing.DummyRequest()\n        self.assertRaises(ValueError, self._makeOne, request, reissue_time='invalid value')\n\n    def test_cookie_max_age_invalid(self):\n        request = testing.DummyRequest()\n        self.assertRaises(ValueError, self._makeOne, request, max_age='invalid value')\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\n    def test_bad_pickle(self):\n        import base64\n        import hashlib\n        import hmac\n\n        digestmod = lambda: hashlib.new('sha512')\n        # generated from dumping an object that cannot be found anymore, eg:\n        # class Foo: pass\n        # print(pickle.dumps(Foo()))\n        cstruct = b'(i__main__\\nFoo\\np0\\n(dp1\\nb.'\n        sig = hmac.new(b'pyramid.session.secret', cstruct, digestmod).digest()\n        cookieval = base64.urlsafe_b64encode(sig + cstruct).rstrip(b'=')\n\n        request = testing.DummyRequest()\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, secret='secret')\n        self.assertEqual(session, {})",
                            "ast_type_str": "ClassDef",
                            "start_lineno": 331,
                            "end_lineno": 482,
                            "parent": null
                        }
                    ],
                    "added_entities": [
                        {
                            "file_name": "pyramid/tests/test_session.py",
                            "type": "method",
                            "name": "TestSignedCookieSession.test_bad_pickle",
                            "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_reissue_str_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, reissue_time='0')\n        self.assertEqual(session['state'], 1)\n        self.assertTrue(session._dirty)\n\n    def test_reissue_invalid(self):\n        request = testing.DummyRequest()\n        self.assertRaises(ValueError, self._makeOne, request, reissue_time='invalid value')\n\n    def test_cookie_max_age_invalid(self):\n        request = testing.DummyRequest()\n        self.assertRaises(ValueError, self._makeOne, request, max_age='invalid value')\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\n    def test_bad_pickle(self):\n        import base64\n        import hashlib\n        import hmac\n\n        digestmod = lambda: hashlib.new('sha512')\n        # generated from dumping an object that cannot be found anymore, eg:\n        # class Foo: pass\n        # print(pickle.dumps(Foo()))\n        cstruct = b'(i__main__\\nFoo\\np0\\n(dp1\\nb.'\n        sig = hmac.new(b'pyramid.session.secret', cstruct, digestmod).digest()\n        cookieval = base64.urlsafe_b64encode(sig + cstruct).rstrip(b'=')\n\n        request = testing.DummyRequest()\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, secret='secret')\n        self.assertEqual(session, {})",
                            "ast_type_str": "ClassDef",
                            "start_lineno": 466,
                            "end_lineno": 482,
                            "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_reissue_str_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, reissue_time='0')\n        self.assertEqual(session['state'], 1)\n        self.assertTrue(session._dirty)\n\n    def test_reissue_invalid(self):\n        request = testing.DummyRequest()\n        self.assertRaises(ValueError, self._makeOne, request, reissue_time='invalid value')\n\n    def test_cookie_max_age_invalid(self):\n        request = testing.DummyRequest()\n        self.assertRaises(ValueError, self._makeOne, request, max_age='invalid value')\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\n    def test_bad_pickle(self):\n        import base64\n        import hashlib\n        import hmac\n\n        digestmod = lambda: hashlib.new('sha512')\n        # generated from dumping an object that cannot be found anymore, eg:\n        # class Foo: pass\n        # print(pickle.dumps(Foo()))\n        cstruct = b'(i__main__\\nFoo\\np0\\n(dp1\\nb.'\n        sig = hmac.new(b'pyramid.session.secret', cstruct, digestmod).digest()\n        cookieval = base64.urlsafe_b64encode(sig + cstruct).rstrip(b'=')\n\n        request = testing.DummyRequest()\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, secret='secret')\n        self.assertEqual(session, {})",
                                "ast_type_str": "ClassDef",
                                "start_lineno": 331,
                                "end_lineno": 482,
                                "parent": null
                            }
                        }
                    ],
                    "deleted_entities": []
                },
                {
                    "descriptor": {
                        "old_range": {
                            "start": 661,
                            "length": 6
                        },
                        "new_range": {
                            "start": 680,
                            "length": 44
                        },
                        "section": "class Test_signed_deserialize(unittest.TestCase):"
                    },
                    "line_group": {
                        "all_lines": [
                            {
                                "content": "        self.assertEqual(result, '123')",
                                "type": "context"
                            },
                            {
                                "content": "",
                                "type": "context"
                            },
                            {
                                "content": "",
                                "type": "context"
                            },
                            {
                                "content": "class TestPickleSerializer(unittest.TestCase):",
                                "type": "added"
                            },
                            {
                                "content": "    def _makeOne(self):",
                                "type": "added"
                            },
                            {
                                "content": "        from pyramid.session import PickleSerializer",
                                "type": "added"
                            },
                            {
                                "content": "        return PickleSerializer()",
                                "type": "added"
                            },
                            {
                                "content": "",
                                "type": "added"
                            },
                            {
                                "content": "    def test_loads(self):",
                                "type": "added"
                            },
                            {
                                "content": "        # generated from dumping Dummy() using protocol=2",
                                "type": "added"
                            },
                            {
                                "content": "        cstruct = b'\\x80\\x02cpyramid.tests.test_session\\nDummy\\nq\\x00)\\x81q\\x01.'",
                                "type": "added"
                            },
                            {
                                "content": "        serializer = self._makeOne()",
                                "type": "added"
                            },
                            {
                                "content": "        result = serializer.loads(cstruct)",
                                "type": "added"
                            },
                            {
                                "content": "        self.assertIsInstance(result, Dummy)",
                                "type": "added"
                            },
                            {
                                "content": "",
                                "type": "added"
                            },
                            {
                                "content": "    def test_loads_raises_ValueError_on_invalid_data(self):",
                                "type": "added"
                            },
                            {
                                "content": "        cstruct = b'not pickled'",
                                "type": "added"
                            },
                            {
                                "content": "        serializer = self._makeOne()",
                                "type": "added"
                            },
                            {
                                "content": "        self.assertRaises(ValueError, serializer.loads, cstruct)",
                                "type": "added"
                            },
                            {
                                "content": "",
                                "type": "added"
                            },
                            {
                                "content": "    def test_loads_raises_ValueError_on_bad_import(self):",
                                "type": "added"
                            },
                            {
                                "content": "        # generated from dumping an object that cannot be found anymore, eg:",
                                "type": "added"
                            },
                            {
                                "content": "        # class Foo: pass",
                                "type": "added"
                            },
                            {
                                "content": "        # print(pickle.dumps(Foo()))",
                                "type": "added"
                            },
                            {
                                "content": "        cstruct = b'(i__main__\\nFoo\\np0\\n(dp1\\nb.'",
                                "type": "added"
                            },
                            {
                                "content": "        serializer = self._makeOne()",
                                "type": "added"
                            },
                            {
                                "content": "        self.assertRaises(ValueError, serializer.loads, cstruct)",
                                "type": "added"
                            },
                            {
                                "content": "",
                                "type": "added"
                            },
                            {
                                "content": "    def test_dumps(self):",
                                "type": "added"
                            },
                            {
                                "content": "        obj = Dummy()",
                                "type": "added"
                            },
                            {
                                "content": "        serializer = self._makeOne()",
                                "type": "added"
                            },
                            {
                                "content": "        result = serializer.dumps(obj)",
                                "type": "added"
                            },
                            {
                                "content": "        expected_result = pickle.dumps(obj, protocol=pickle.HIGHEST_PROTOCOL)",
                                "type": "added"
                            },
                            {
                                "content": "        self.assertEqual(result, expected_result)",
                                "type": "added"
                            },
                            {
                                "content": "        self.assertIsInstance(result, bytes)",
                                "type": "added"
                            },
                            {
                                "content": "",
                                "type": "added"
                            },
                            {
                                "content": "",
                                "type": "added"
                            },
                            {
                                "content": "class Dummy(object):",
                                "type": "added"
                            },
                            {
                                "content": "    pass",
                                "type": "added"
                            },
                            {
                                "content": "",
                                "type": "added"
                            },
                            {
                                "content": "",
                                "type": "added"
                            },
                            {
                                "content": "class DummySerializer(object):",
                                "type": "context"
                            },
                            {
                                "content": "    def dumps(self, value):",
                                "type": "context"
                            },
                            {
                                "content": "        return base64.b64encode(json.dumps(value).encode('utf-8'))",
                                "type": "context"
                            },
                            {
                                "content": "",
                                "type": "context"
                            }
                        ]
                    },
                    "modified_entities": [],
                    "added_entities": [
                        {
                            "file_name": "pyramid/tests/test_session.py",
                            "type": "method",
                            "name": "TestPickleSerializer.test_loads_raises_ValueError_on_invalid_data",
                            "content": "class TestPickleSerializer(unittest.TestCase):\n    def _makeOne(self):\n        from pyramid.session import PickleSerializer\n        return PickleSerializer()\n\n    def test_loads(self):\n        # generated from dumping Dummy() using protocol=2\n        cstruct = b'\\x80\\x02cpyramid.tests.test_session\\nDummy\\nq\\x00)\\x81q\\x01.'\n        serializer = self._makeOne()\n        result = serializer.loads(cstruct)\n        self.assertIsInstance(result, Dummy)\n\n    def test_loads_raises_ValueError_on_invalid_data(self):\n        cstruct = b'not pickled'\n        serializer = self._makeOne()\n        self.assertRaises(ValueError, serializer.loads, cstruct)\n\n    def test_loads_raises_ValueError_on_bad_import(self):\n        # generated from dumping an object that cannot be found anymore, eg:\n        # class Foo: pass\n        # print(pickle.dumps(Foo()))\n        cstruct = b'(i__main__\\nFoo\\np0\\n(dp1\\nb.'\n        serializer = self._makeOne()\n        self.assertRaises(ValueError, serializer.loads, cstruct)\n\n    def test_dumps(self):\n        obj = Dummy()\n        serializer = self._makeOne()\n        result = serializer.dumps(obj)\n        expected_result = pickle.dumps(obj, protocol=pickle.HIGHEST_PROTOCOL)\n        self.assertEqual(result, expected_result)\n        self.assertIsInstance(result, bytes)",
                            "ast_type_str": "ClassDef",
                            "start_lineno": 695,
                            "end_lineno": 698,
                            "parent": {
                                "file_name": "pyramid/tests/test_session.py",
                                "type": "class",
                                "name": "TestPickleSerializer",
                                "content": "class TestPickleSerializer(unittest.TestCase):\n    def _makeOne(self):\n        from pyramid.session import PickleSerializer\n        return PickleSerializer()\n\n    def test_loads(self):\n        # generated from dumping Dummy() using protocol=2\n        cstruct = b'\\x80\\x02cpyramid.tests.test_session\\nDummy\\nq\\x00)\\x81q\\x01.'\n        serializer = self._makeOne()\n        result = serializer.loads(cstruct)\n        self.assertIsInstance(result, Dummy)\n\n    def test_loads_raises_ValueError_on_invalid_data(self):\n        cstruct = b'not pickled'\n        serializer = self._makeOne()\n        self.assertRaises(ValueError, serializer.loads, cstruct)\n\n    def test_loads_raises_ValueError_on_bad_import(self):\n        # generated from dumping an object that cannot be found anymore, eg:\n        # class Foo: pass\n        # print(pickle.dumps(Foo()))\n        cstruct = b'(i__main__\\nFoo\\np0\\n(dp1\\nb.'\n        serializer = self._makeOne()\n        self.assertRaises(ValueError, serializer.loads, cstruct)\n\n    def test_dumps(self):\n        obj = Dummy()\n        serializer = self._makeOne()\n        result = serializer.dumps(obj)\n        expected_result = pickle.dumps(obj, protocol=pickle.HIGHEST_PROTOCOL)\n        self.assertEqual(result, expected_result)\n        self.assertIsInstance(result, bytes)",
                                "ast_type_str": "ClassDef",
                                "start_lineno": 683,
                                "end_lineno": 714,
                                "parent": null
                            }
                        },
                        {
                            "file_name": "pyramid/tests/test_session.py",
                            "type": "method",
                            "name": "TestPickleSerializer.test_dumps",
                            "content": "class TestPickleSerializer(unittest.TestCase):\n    def _makeOne(self):\n        from pyramid.session import PickleSerializer\n        return PickleSerializer()\n\n    def test_loads(self):\n        # generated from dumping Dummy() using protocol=2\n        cstruct = b'\\x80\\x02cpyramid.tests.test_session\\nDummy\\nq\\x00)\\x81q\\x01.'\n        serializer = self._makeOne()\n        result = serializer.loads(cstruct)\n        self.assertIsInstance(result, Dummy)\n\n    def test_loads_raises_ValueError_on_invalid_data(self):\n        cstruct = b'not pickled'\n        serializer = self._makeOne()\n        self.assertRaises(ValueError, serializer.loads, cstruct)\n\n    def test_loads_raises_ValueError_on_bad_import(self):\n        # generated from dumping an object that cannot be found anymore, eg:\n        # class Foo: pass\n        # print(pickle.dumps(Foo()))\n        cstruct = b'(i__main__\\nFoo\\np0\\n(dp1\\nb.'\n        serializer = self._makeOne()\n        self.assertRaises(ValueError, serializer.loads, cstruct)\n\n    def test_dumps(self):\n        obj = Dummy()\n        serializer = self._makeOne()\n        result = serializer.dumps(obj)\n        expected_result = pickle.dumps(obj, protocol=pickle.HIGHEST_PROTOCOL)\n        self.assertEqual(result, expected_result)\n        self.assertIsInstance(result, bytes)",
                            "ast_type_str": "ClassDef",
                            "start_lineno": 708,
                            "end_lineno": 714,
                            "parent": {
                                "file_name": "pyramid/tests/test_session.py",
                                "type": "class",
                                "name": "TestPickleSerializer",
                                "content": "class TestPickleSerializer(unittest.TestCase):\n    def _makeOne(self):\n        from pyramid.session import PickleSerializer\n        return PickleSerializer()\n\n    def test_loads(self):\n        # generated from dumping Dummy() using protocol=2\n        cstruct = b'\\x80\\x02cpyramid.tests.test_session\\nDummy\\nq\\x00)\\x81q\\x01.'\n        serializer = self._makeOne()\n        result = serializer.loads(cstruct)\n        self.assertIsInstance(result, Dummy)\n\n    def test_loads_raises_ValueError_on_invalid_data(self):\n        cstruct = b'not pickled'\n        serializer = self._makeOne()\n        self.assertRaises(ValueError, serializer.loads, cstruct)\n\n    def test_loads_raises_ValueError_on_bad_import(self):\n        # generated from dumping an object that cannot be found anymore, eg:\n        # class Foo: pass\n        # print(pickle.dumps(Foo()))\n        cstruct = b'(i__main__\\nFoo\\np0\\n(dp1\\nb.'\n        serializer = self._makeOne()\n        self.assertRaises(ValueError, serializer.loads, cstruct)\n\n    def test_dumps(self):\n        obj = Dummy()\n        serializer = self._makeOne()\n        result = serializer.dumps(obj)\n        expected_result = pickle.dumps(obj, protocol=pickle.HIGHEST_PROTOCOL)\n        self.assertEqual(result, expected_result)\n        self.assertIsInstance(result, bytes)",
                                "ast_type_str": "ClassDef",
                                "start_lineno": 683,
                                "end_lineno": 714,
                                "parent": null
                            }
                        },
                        {
                            "file_name": "pyramid/tests/test_session.py",
                            "type": "class",
                            "name": "Dummy",
                            "content": "class Dummy(object):\n    pass",
                            "ast_type_str": "ClassDef",
                            "start_lineno": 717,
                            "end_lineno": 718,
                            "parent": null
                        },
                        {
                            "file_name": "pyramid/tests/test_session.py",
                            "type": "method",
                            "name": "TestPickleSerializer.test_loads",
                            "content": "class TestPickleSerializer(unittest.TestCase):\n    def _makeOne(self):\n        from pyramid.session import PickleSerializer\n        return PickleSerializer()\n\n    def test_loads(self):\n        # generated from dumping Dummy() using protocol=2\n        cstruct = b'\\x80\\x02cpyramid.tests.test_session\\nDummy\\nq\\x00)\\x81q\\x01.'\n        serializer = self._makeOne()\n        result = serializer.loads(cstruct)\n        self.assertIsInstance(result, Dummy)\n\n    def test_loads_raises_ValueError_on_invalid_data(self):\n        cstruct = b'not pickled'\n        serializer = self._makeOne()\n        self.assertRaises(ValueError, serializer.loads, cstruct)\n\n    def test_loads_raises_ValueError_on_bad_import(self):\n        # generated from dumping an object that cannot be found anymore, eg:\n        # class Foo: pass\n        # print(pickle.dumps(Foo()))\n        cstruct = b'(i__main__\\nFoo\\np0\\n(dp1\\nb.'\n        serializer = self._makeOne()\n        self.assertRaises(ValueError, serializer.loads, cstruct)\n\n    def test_dumps(self):\n        obj = Dummy()\n        serializer = self._makeOne()\n        result = serializer.dumps(obj)\n        expected_result = pickle.dumps(obj, protocol=pickle.HIGHEST_PROTOCOL)\n        self.assertEqual(result, expected_result)\n        self.assertIsInstance(result, bytes)",
                            "ast_type_str": "ClassDef",
                            "start_lineno": 688,
                            "end_lineno": 693,
                            "parent": {
                                "file_name": "pyramid/tests/test_session.py",
                                "type": "class",
                                "name": "TestPickleSerializer",
                                "content": "class TestPickleSerializer(unittest.TestCase):\n    def _makeOne(self):\n        from pyramid.session import PickleSerializer\n        return PickleSerializer()\n\n    def test_loads(self):\n        # generated from dumping Dummy() using protocol=2\n        cstruct = b'\\x80\\x02cpyramid.tests.test_session\\nDummy\\nq\\x00)\\x81q\\x01.'\n        serializer = self._makeOne()\n        result = serializer.loads(cstruct)\n        self.assertIsInstance(result, Dummy)\n\n    def test_loads_raises_ValueError_on_invalid_data(self):\n        cstruct = b'not pickled'\n        serializer = self._makeOne()\n        self.assertRaises(ValueError, serializer.loads, cstruct)\n\n    def test_loads_raises_ValueError_on_bad_import(self):\n        # generated from dumping an object that cannot be found anymore, eg:\n        # class Foo: pass\n        # print(pickle.dumps(Foo()))\n        cstruct = b'(i__main__\\nFoo\\np0\\n(dp1\\nb.'\n        serializer = self._makeOne()\n        self.assertRaises(ValueError, serializer.loads, cstruct)\n\n    def test_dumps(self):\n        obj = Dummy()\n        serializer = self._makeOne()\n        result = serializer.dumps(obj)\n        expected_result = pickle.dumps(obj, protocol=pickle.HIGHEST_PROTOCOL)\n        self.assertEqual(result, expected_result)\n        self.assertIsInstance(result, bytes)",
                                "ast_type_str": "ClassDef",
                                "start_lineno": 683,
                                "end_lineno": 714,
                                "parent": null
                            }
                        },
                        {
                            "file_name": "pyramid/tests/test_session.py",
                            "type": "method",
                            "name": "TestPickleSerializer.test_loads_raises_ValueError_on_bad_import",
                            "content": "class TestPickleSerializer(unittest.TestCase):\n    def _makeOne(self):\n        from pyramid.session import PickleSerializer\n        return PickleSerializer()\n\n    def test_loads(self):\n        # generated from dumping Dummy() using protocol=2\n        cstruct = b'\\x80\\x02cpyramid.tests.test_session\\nDummy\\nq\\x00)\\x81q\\x01.'\n        serializer = self._makeOne()\n        result = serializer.loads(cstruct)\n        self.assertIsInstance(result, Dummy)\n\n    def test_loads_raises_ValueError_on_invalid_data(self):\n        cstruct = b'not pickled'\n        serializer = self._makeOne()\n        self.assertRaises(ValueError, serializer.loads, cstruct)\n\n    def test_loads_raises_ValueError_on_bad_import(self):\n        # generated from dumping an object that cannot be found anymore, eg:\n        # class Foo: pass\n        # print(pickle.dumps(Foo()))\n        cstruct = b'(i__main__\\nFoo\\np0\\n(dp1\\nb.'\n        serializer = self._makeOne()\n        self.assertRaises(ValueError, serializer.loads, cstruct)\n\n    def test_dumps(self):\n        obj = Dummy()\n        serializer = self._makeOne()\n        result = serializer.dumps(obj)\n        expected_result = pickle.dumps(obj, protocol=pickle.HIGHEST_PROTOCOL)\n        self.assertEqual(result, expected_result)\n        self.assertIsInstance(result, bytes)",
                            "ast_type_str": "ClassDef",
                            "start_lineno": 700,
                            "end_lineno": 706,
                            "parent": {
                                "file_name": "pyramid/tests/test_session.py",
                                "type": "class",
                                "name": "TestPickleSerializer",
                                "content": "class TestPickleSerializer(unittest.TestCase):\n    def _makeOne(self):\n        from pyramid.session import PickleSerializer\n        return PickleSerializer()\n\n    def test_loads(self):\n        # generated from dumping Dummy() using protocol=2\n        cstruct = b'\\x80\\x02cpyramid.tests.test_session\\nDummy\\nq\\x00)\\x81q\\x01.'\n        serializer = self._makeOne()\n        result = serializer.loads(cstruct)\n        self.assertIsInstance(result, Dummy)\n\n    def test_loads_raises_ValueError_on_invalid_data(self):\n        cstruct = b'not pickled'\n        serializer = self._makeOne()\n        self.assertRaises(ValueError, serializer.loads, cstruct)\n\n    def test_loads_raises_ValueError_on_bad_import(self):\n        # generated from dumping an object that cannot be found anymore, eg:\n        # class Foo: pass\n        # print(pickle.dumps(Foo()))\n        cstruct = b'(i__main__\\nFoo\\np0\\n(dp1\\nb.'\n        serializer = self._makeOne()\n        self.assertRaises(ValueError, serializer.loads, cstruct)\n\n    def test_dumps(self):\n        obj = Dummy()\n        serializer = self._makeOne()\n        result = serializer.dumps(obj)\n        expected_result = pickle.dumps(obj, protocol=pickle.HIGHEST_PROTOCOL)\n        self.assertEqual(result, expected_result)\n        self.assertIsInstance(result, bytes)",
                                "ast_type_str": "ClassDef",
                                "start_lineno": 683,
                                "end_lineno": 714,
                                "parent": null
                            }
                        },
                        {
                            "file_name": "pyramid/tests/test_session.py",
                            "type": "method",
                            "name": "TestPickleSerializer._makeOne",
                            "content": "class TestPickleSerializer(unittest.TestCase):\n    def _makeOne(self):\n        from pyramid.session import PickleSerializer\n        return PickleSerializer()\n\n    def test_loads(self):\n        # generated from dumping Dummy() using protocol=2\n        cstruct = b'\\x80\\x02cpyramid.tests.test_session\\nDummy\\nq\\x00)\\x81q\\x01.'\n        serializer = self._makeOne()\n        result = serializer.loads(cstruct)\n        self.assertIsInstance(result, Dummy)\n\n    def test_loads_raises_ValueError_on_invalid_data(self):\n        cstruct = b'not pickled'\n        serializer = self._makeOne()\n        self.assertRaises(ValueError, serializer.loads, cstruct)\n\n    def test_loads_raises_ValueError_on_bad_import(self):\n        # generated from dumping an object that cannot be found anymore, eg:\n        # class Foo: pass\n        # print(pickle.dumps(Foo()))\n        cstruct = b'(i__main__\\nFoo\\np0\\n(dp1\\nb.'\n        serializer = self._makeOne()\n        self.assertRaises(ValueError, serializer.loads, cstruct)\n\n    def test_dumps(self):\n        obj = Dummy()\n        serializer = self._makeOne()\n        result = serializer.dumps(obj)\n        expected_result = pickle.dumps(obj, protocol=pickle.HIGHEST_PROTOCOL)\n        self.assertEqual(result, expected_result)\n        self.assertIsInstance(result, bytes)",
                            "ast_type_str": "ClassDef",
                            "start_lineno": 684,
                            "end_lineno": 686,
                            "parent": {
                                "file_name": "pyramid/tests/test_session.py",
                                "type": "class",
                                "name": "TestPickleSerializer",
                                "content": "class TestPickleSerializer(unittest.TestCase):\n    def _makeOne(self):\n        from pyramid.session import PickleSerializer\n        return PickleSerializer()\n\n    def test_loads(self):\n        # generated from dumping Dummy() using protocol=2\n        cstruct = b'\\x80\\x02cpyramid.tests.test_session\\nDummy\\nq\\x00)\\x81q\\x01.'\n        serializer = self._makeOne()\n        result = serializer.loads(cstruct)\n        self.assertIsInstance(result, Dummy)\n\n    def test_loads_raises_ValueError_on_invalid_data(self):\n        cstruct = b'not pickled'\n        serializer = self._makeOne()\n        self.assertRaises(ValueError, serializer.loads, cstruct)\n\n    def test_loads_raises_ValueError_on_bad_import(self):\n        # generated from dumping an object that cannot be found anymore, eg:\n        # class Foo: pass\n        # print(pickle.dumps(Foo()))\n        cstruct = b'(i__main__\\nFoo\\np0\\n(dp1\\nb.'\n        serializer = self._makeOne()\n        self.assertRaises(ValueError, serializer.loads, cstruct)\n\n    def test_dumps(self):\n        obj = Dummy()\n        serializer = self._makeOne()\n        result = serializer.dumps(obj)\n        expected_result = pickle.dumps(obj, protocol=pickle.HIGHEST_PROTOCOL)\n        self.assertEqual(result, expected_result)\n        self.assertIsInstance(result, bytes)",
                                "ast_type_str": "ClassDef",
                                "start_lineno": 683,
                                "end_lineno": 714,
                                "parent": null
                            }
                        },
                        {
                            "file_name": "pyramid/tests/test_session.py",
                            "type": "class",
                            "name": "TestPickleSerializer",
                            "content": "class TestPickleSerializer(unittest.TestCase):\n    def _makeOne(self):\n        from pyramid.session import PickleSerializer\n        return PickleSerializer()\n\n    def test_loads(self):\n        # generated from dumping Dummy() using protocol=2\n        cstruct = b'\\x80\\x02cpyramid.tests.test_session\\nDummy\\nq\\x00)\\x81q\\x01.'\n        serializer = self._makeOne()\n        result = serializer.loads(cstruct)\n        self.assertIsInstance(result, Dummy)\n\n    def test_loads_raises_ValueError_on_invalid_data(self):\n        cstruct = b'not pickled'\n        serializer = self._makeOne()\n        self.assertRaises(ValueError, serializer.loads, cstruct)\n\n    def test_loads_raises_ValueError_on_bad_import(self):\n        # generated from dumping an object that cannot be found anymore, eg:\n        # class Foo: pass\n        # print(pickle.dumps(Foo()))\n        cstruct = b'(i__main__\\nFoo\\np0\\n(dp1\\nb.'\n        serializer = self._makeOne()\n        self.assertRaises(ValueError, serializer.loads, cstruct)\n\n    def test_dumps(self):\n        obj = Dummy()\n        serializer = self._makeOne()\n        result = serializer.dumps(obj)\n        expected_result = pickle.dumps(obj, protocol=pickle.HIGHEST_PROTOCOL)\n        self.assertEqual(result, expected_result)\n        self.assertIsInstance(result, bytes)",
                            "ast_type_str": "ClassDef",
                            "start_lineno": 683,
                            "end_lineno": 714,
                            "parent": null
                        }
                    ],
                    "deleted_entities": []
                }
            ]
        }
    ],
    "old_commit_hash": "a9cd71dd14eb357bd1a538e2763ab6b78f1bc047^",
    "new_commit_hash": "a9cd71dd14eb357bd1a538e2763ab6b78f1bc047",
    "commit_message": "catch other pickle errors when loading content",
    "commit_date": "2018-08-08T18:40:17-05:00",
    "metadata": {}
}
{
    "repo_name": "pyramid",
    "new_commit_hash": "a9cd71dd14eb357bd1a538e2763ab6b78f1bc047",
    "test_file_codes": [
        "import base64\nimport json\nimport unittest\nfrom pyramid import testing\nfrom pyramid.compat import pickle\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_timeout_str(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_invalid(self):\n        request = testing.DummyRequest()\n        self.assertRaises(ValueError, self._makeOne, request, timeout='Invalid value')\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, samesite = [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        self.assertEqual(samesite, 'SameSite=Lax')\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 base64.b64encode(json.dumps(value).encode('utf-8'))\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_reissue_str_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, reissue_time='0')\n        self.assertEqual(session['state'], 1)\n        self.assertTrue(session._dirty)\n\n    def test_reissue_invalid(self):\n        request = testing.DummyRequest()\n        self.assertRaises(ValueError, self._makeOne, request, reissue_time='invalid value')\n\n    def test_cookie_max_age_invalid(self):\n        request = testing.DummyRequest()\n        self.assertRaises(ValueError, self._makeOne, request, max_age='invalid value')\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_reissue_str_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, reissue_time='0')\n        self.assertEqual(session['state'], 1)\n        self.assertTrue(session._dirty)\n\n    def test_reissue_invalid(self):\n        request = testing.DummyRequest()\n        self.assertRaises(ValueError, self._makeOne, request, reissue_time='invalid value')\n\n    def test_cookie_max_age_invalid(self):\n        request = testing.DummyRequest()\n        self.assertRaises(ValueError, self._makeOne, request, max_age='invalid value')\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\n    def test_bad_pickle(self):\n        import base64\n        import hashlib\n        import hmac\n\n        digestmod = lambda: hashlib.new('sha512')\n        # generated from dumping an object that cannot be found anymore, eg:\n        # class Foo: pass\n        # print(pickle.dumps(Foo()))\n        cstruct = b'(i__main__\\nFoo\\np0\\n(dp1\\nb.'\n        sig = hmac.new(b'pyramid.session.secret', cstruct, digestmod).digest()\n        cookieval = base64.urlsafe_b64encode(sig + cstruct).rstrip(b'=')\n\n        request = testing.DummyRequest()\n        request.cookies['session'] = cookieval\n        session = self._makeOne(request, secret='secret')\n        self.assertEqual(session, {})\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, samesite='Lax')\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        if callbacks is not None: 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, 'utf-8'), 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\n    def test_it_with_highorder_secret(self):\n        secret = b'\\xce\\xb1\\xce\\xb2\\xce\\xb3\\xce\\xb4'.decode('utf-8')\n        expected = serialize('123', secret)\n        result = self._callFUT('123', secret)\n        self.assertEqual(result, expected)\n\n    def test_it_with_latin1_secret(self):\n        secret = b'La Pe\\xc3\\xb1a'\n        expected = serialize('123', secret)\n        result = self._callFUT('123', secret.decode('latin-1'))\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\n    def test_it_with_highorder_secret(self):\n        secret = b'\\xce\\xb1\\xce\\xb2\\xce\\xb3\\xce\\xb4'.decode('utf-8')\n        serialized = serialize('123', secret)\n        result = self._callFUT(serialized, secret)\n        self.assertEqual(result, '123')\n\n    # bwcompat with pyramid <= 1.5b1 where latin1 is the default\n    def test_it_with_latin1_secret(self):\n        secret = b'La Pe\\xc3\\xb1a'\n        serialized = serialize('123', secret)\n        result = self._callFUT(serialized, secret.decode('latin-1'))\n        self.assertEqual(result, '123')\n\n\nclass TestPickleSerializer(unittest.TestCase):\n    def _makeOne(self):\n        from pyramid.session import PickleSerializer\n        return PickleSerializer()\n\n    def test_loads(self):\n        # generated from dumping Dummy() using protocol=2\n        cstruct = b'\\x80\\x02cpyramid.tests.test_session\\nDummy\\nq\\x00)\\x81q\\x01.'\n        serializer = self._makeOne()\n        result = serializer.loads(cstruct)\n        self.assertIsInstance(result, Dummy)\n\n    def test_loads_raises_ValueError_on_invalid_data(self):\n        cstruct = b'not pickled'\n        serializer = self._makeOne()\n        self.assertRaises(ValueError, serializer.loads, cstruct)\n\n    def test_loads_raises_ValueError_on_bad_import(self):\n        # generated from dumping an object that cannot be found anymore, eg:\n        # class Foo: pass\n        # print(pickle.dumps(Foo()))\n        cstruct = b'(i__main__\\nFoo\\np0\\n(dp1\\nb.'\n        serializer = self._makeOne()\n        self.assertRaises(ValueError, serializer.loads, cstruct)\n\n    def test_dumps(self):\n        obj = Dummy()\n        serializer = self._makeOne()\n        result = serializer.dumps(obj)\n        expected_result = pickle.dumps(obj, protocol=pickle.HIGHEST_PROTOCOL)\n        self.assertEqual(result, expected_result)\n        self.assertIsInstance(result, bytes)\n\n\nclass Dummy(object):\n    pass\n\n\nclass DummySerializer(object):\n    def dumps(self, value):\n        return base64.b64encode(json.dumps(value).encode('utf-8'))\n\n    def loads(self, value):\n        try:\n            return json.loads(base64.b64decode(value).decode('utf-8'))\n\n        # base64.b64decode raises a TypeError on py2 instead of a ValueError\n        # and a ValueError is required for the session to handle it properly\n        except TypeError:\n            raise ValueError\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 11 packages in 748ms\nPrepared 1 package in 912ms\nInstalled 11 packages in 12ms\n + hupper==1.12.1\n + pastedeploy==3.1.0\n + plaster==1.1.2\n + plaster-pastedeploy==1.0.1\n + pyramid==1.10.dev0 (from file:///home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047)\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 24 packages in 16ms\nInstalled 13 packages in 8ms\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\n + zope-component==6.0\n + zope-event==5.0\n + zope-hookable==7.0\nResolved 16 packages in 5ms\nInstalled 12 packages in 7ms\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_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047\ncollected 948 items\n\nr2e_tests/test_1.py .................................................... [  5%]\n........................................................................ [ 13%]\n..........F..                                                            [ 14%]\nr2e_tests/test_config/test_adapters.py .FF..............F...             [ 16%]\nr2e_tests/test_config/test_assets.py ....F.F...F...FF.FF................ [ 20%]\n.....................................F.F................................ [ 27%]\n                                                                         [ 27%]\nr2e_tests/test_config/test_factories.py .......................          [ 30%]\nr2e_tests/test_config/test_i18n.py FFFF..FF.FFF..                        [ 31%]\nr2e_tests/test_config/test_init.py ..................................... [ 35%]\n.......F..F.......F..............F...........F.....................FF... [ 43%]\nFFF..............................                                        [ 46%]\nr2e_tests/test_config/test_rendering.py ...                              [ 47%]\nr2e_tests/test_config/test_routes.py ........................            [ 49%]\nr2e_tests/test_config/test_security.py ............                      [ 50%]\nr2e_tests/test_config/test_settings.py ........................          [ 53%]\nr2e_tests/test_config/test_testing.py ............                       [ 54%]\nr2e_tests/test_config/test_tweens.py .................................   [ 58%]\nr2e_tests/test_config/test_util.py ........................              [ 60%]\nr2e_tests/test_config/test_views.py .................................F.. [ 64%]\n........................................................................ [ 72%]\n.......................FF............................................... [ 79%]\n.......................................................F.......F.        [ 86%]\nr2e_tests/test_scripts/test_common.py ..                                 [ 86%]\nr2e_tests/test_scripts/test_pcreate.py .....................             [ 89%]\nr2e_tests/test_scripts/test_pdistreport.py ..                            [ 89%]\nr2e_tests/test_scripts/test_prequest.py ...................              [ 91%]\nr2e_tests/test_scripts/test_proutes.py ...........FFFF.F.FF....F..FF.    [ 94%]\nr2e_tests/test_scripts/test_pserve.py .F......                           [ 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_______________________ TestPickleSerializer.test_loads ________________________\n\nself = <r2e_tests.test_1.TestPickleSerializer testMethod=test_loads>\n\n    def test_loads(self):\n        # generated from dumping Dummy() using protocol=2\n        cstruct = b'\\x80\\x02cpyramid.tests.test_session\\nDummy\\nq\\x00)\\x81q\\x01.'\n        serializer = self._makeOne()\n        result = serializer.loads(cstruct)\n>       self.assertIsInstance(result, Dummy)\nE       AssertionError: <pyramid.tests.test_session.Dummy object at 0x74e4dfbbf370> is not an instance of <class 'r2e_tests.test_1.Dummy'>\n\nr2e_tests/test_1.py:693: AssertionError\n__ AdaptersConfiguratorMixinTests.test_add_resource_url_adapter_dotted_names ___\n\nself = <r2e_tests.test_config.test_adapters.AdaptersConfiguratorMixinTests testMethod=test_add_resource_url_adapter_dotted_names>\n\n    def test_add_resource_url_adapter_dotted_names(self):\n        from pyramid.interfaces import IResourceURL\n        config = self._makeOne(autocommit=True)\n        config.add_resource_url_adapter(\n            'pyramid.tests.test_config.test_adapters.DummyResourceURL',\n            'pyramid.tests.test_config.test_adapters.DummyIface',\n            )\n        iface = DummyIface()\n>       adapter = config.registry.getMultiAdapter((iface, iface),\n                                                    IResourceURL)\n\nr2e_tests/test_config/test_adapters.py:280: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = <Registry r2e_tests.test_config>\nobjects = (<r2e_tests.test_config.test_adapters.DummyIface object at 0x74e4e00cb8e0>, <r2e_tests.test_config.test_adapters.DummyIface object at 0x74e4e00cb8e0>)\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 0x74e4e00cb8e0>, <r2e_tests.test_config.test_adapters.DummyIface object at 0x74e4e00cb8e0>), <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 0x74e4dfb70040>\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 0x74e4dfb70040>, <InterfaceClass pyramid.interfaces.ITraverser>, '')\n\n.venv/lib/python3.8/site-packages/zope/interface/registry.py:368: ComponentLookupError\n___ TestAssetsConfiguratorMixin.test_override_asset_directory_with_directory ___\n\nself = <r2e_tests.test_config.test_assets.TestAssetsConfiguratorMixin testMethod=test_override_asset_directory_with_directory>\n\n    def test_override_asset_directory_with_directory(self):\n        from pyramid.config.assets import PackageAssetSource\n        config = self._makeOne(autocommit=True)\n        override = DummyUnderOverride()\n        config.override_asset(\n            'pyramid.tests.test_config.pkgs.asset:templates/',\n            'pyramid.tests.test_config.pkgs.asset.subpackage:templates/',\n            _override=override)\n        from pyramid.tests.test_config.pkgs import asset\n        from pyramid.tests.test_config.pkgs.asset import subpackage\n        self.assertEqual(override.package, asset)\n        self.assertEqual(override.path, 'templates/')\n        source = override.source\n        self.assertTrue(isinstance(source, PackageAssetSource))\n        self.assertEqual(source.package, subpackage)\n        self.assertEqual(source.prefix, 'templates/')\n    \n        resource_name = 'bar.pt'\n        expected = os.path.join(here, 'pkgs', 'asset',\n                                'subpackage', 'templates', 'bar.pt')\n>       self.assertEqual(override.source.get_filename(resource_name),\n                         expected)\nE       AssertionError: '/hom[90 chars]c047/pyramid/tests/test_config/pkgs/asset/subp[19 chars]r.pt' != '/hom[90 chars]c047/r2e_tests/test_config/pkgs/asset/subpacka[15 chars]r.pt'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/pyramid/tests/test_config/pkgs/asset/subpackage/templates/bar.pt\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/r2e_tests/test_config/pkgs/asset/subpackage/templates/bar.pt\nE       ?                                                                                                     ^^^\n\nr2e_tests/test_config/test_assets.py:106: AssertionError\n____ TestAssetsConfiguratorMixin.test_override_asset_directory_with_package ____\n\nself = <r2e_tests.test_config.test_assets.TestAssetsConfiguratorMixin testMethod=test_override_asset_directory_with_package>\n\n    def test_override_asset_directory_with_package(self):\n        from pyramid.config.assets import PackageAssetSource\n        config = self._makeOne(autocommit=True)\n        override = DummyUnderOverride()\n        config.override_asset(\n            'pyramid.tests.test_config.pkgs.asset:templates/',\n            'pyramid.tests.test_config.pkgs.asset.subpackage',\n            _override=override)\n        from pyramid.tests.test_config.pkgs import asset\n        from pyramid.tests.test_config.pkgs.asset import subpackage\n        self.assertEqual(override.package, asset)\n        self.assertEqual(override.path, 'templates/')\n        source = override.source\n        self.assertTrue(isinstance(source, PackageAssetSource))\n        self.assertEqual(source.package, subpackage)\n        self.assertEqual(source.prefix, '')\n    \n        resource_name = 'templates/bar.pt'\n        expected = os.path.join(here, 'pkgs', 'asset',\n                                'subpackage', 'templates', 'bar.pt')\n>       self.assertEqual(override.source.get_filename(resource_name),\n                         expected)\nE       AssertionError: '/hom[90 chars]c047/pyramid/tests/test_config/pkgs/asset/subp[19 chars]r.pt' != '/hom[90 chars]c047/r2e_tests/test_config/pkgs/asset/subpacka[15 chars]r.pt'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/pyramid/tests/test_config/pkgs/asset/subpackage/templates/bar.pt\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/r2e_tests/test_config/pkgs/asset/subpackage/templates/bar.pt\nE       ?                                                                                                     ^^^\n\nr2e_tests/test_config/test_assets.py:129: AssertionError\n________ TestAssetsConfiguratorMixin.test_override_asset_file_with_file ________\n\nself = <r2e_tests.test_config.test_assets.TestAssetsConfiguratorMixin testMethod=test_override_asset_file_with_file>\n\n    def test_override_asset_file_with_file(self):\n        from pyramid.config.assets import PackageAssetSource\n        config = self._makeOne(autocommit=True)\n        override = DummyUnderOverride()\n        config.override_asset(\n            'pyramid.tests.test_config.pkgs.asset:templates/foo.pt',\n            'pyramid.tests.test_config.pkgs.asset.subpackage:templates/bar.pt',\n            _override=override)\n        from pyramid.tests.test_config.pkgs import asset\n        from pyramid.tests.test_config.pkgs.asset import subpackage\n        self.assertEqual(override.package, asset)\n        self.assertEqual(override.path, 'templates/foo.pt')\n        source = override.source\n        self.assertTrue(isinstance(source, PackageAssetSource))\n        self.assertEqual(source.package, subpackage)\n        self.assertEqual(source.prefix, 'templates/bar.pt')\n    \n        resource_name = ''\n        expected = os.path.join(here, 'pkgs', 'asset',\n                                'subpackage', 'templates', 'bar.pt')\n>       self.assertEqual(override.source.get_filename(resource_name),\n                         expected)\nE       AssertionError: '/hom[90 chars]c047/pyramid/tests/test_config/pkgs/asset/subp[19 chars]r.pt' != '/hom[90 chars]c047/r2e_tests/test_config/pkgs/asset/subpacka[15 chars]r.pt'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/pyramid/tests/test_config/pkgs/asset/subpackage/templates/bar.pt\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/r2e_tests/test_config/pkgs/asset/subpackage/templates/bar.pt\nE       ?                                                                                                     ^^^\n\nr2e_tests/test_config/test_assets.py:60: AssertionError\n____ TestAssetsConfiguratorMixin.test_override_asset_package_with_directory ____\n\nself = <r2e_tests.test_config.test_assets.TestAssetsConfiguratorMixin testMethod=test_override_asset_package_with_directory>\n\n    def test_override_asset_package_with_directory(self):\n        from pyramid.config.assets import PackageAssetSource\n        config = self._makeOne(autocommit=True)\n        override = DummyUnderOverride()\n        config.override_asset(\n            'pyramid.tests.test_config.pkgs.asset',\n            'pyramid.tests.test_config.pkgs.asset.subpackage:templates/',\n            _override=override)\n        from pyramid.tests.test_config.pkgs import asset\n        from pyramid.tests.test_config.pkgs.asset import subpackage\n        self.assertEqual(override.package, asset)\n        self.assertEqual(override.path, '')\n        source = override.source\n        self.assertTrue(isinstance(source, PackageAssetSource))\n        self.assertEqual(source.package, subpackage)\n        self.assertEqual(source.prefix, 'templates/')\n    \n        resource_name = 'bar.pt'\n        expected = os.path.join(here, 'pkgs', 'asset',\n                                'subpackage', 'templates', 'bar.pt')\n>       self.assertEqual(override.source.get_filename(resource_name),\n                         expected)\nE       AssertionError: '/hom[90 chars]c047/pyramid/tests/test_config/pkgs/asset/subp[19 chars]r.pt' != '/hom[90 chars]c047/r2e_tests/test_config/pkgs/asset/subpacka[15 chars]r.pt'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/pyramid/tests/test_config/pkgs/asset/subpackage/templates/bar.pt\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/r2e_tests/test_config/pkgs/asset/subpackage/templates/bar.pt\nE       ?                                                                                                     ^^^\n\nr2e_tests/test_config/test_assets.py:152: AssertionError\n_____ TestAssetsConfiguratorMixin.test_override_asset_package_with_package _____\n\nself = <r2e_tests.test_config.test_assets.TestAssetsConfiguratorMixin testMethod=test_override_asset_package_with_package>\n\n    def test_override_asset_package_with_package(self):\n        from pyramid.config.assets import PackageAssetSource\n        config = self._makeOne(autocommit=True)\n        override = DummyUnderOverride()\n        config.override_asset(\n            'pyramid.tests.test_config.pkgs.asset',\n            'pyramid.tests.test_config.pkgs.asset.subpackage',\n            _override=override)\n        from pyramid.tests.test_config.pkgs import asset\n        from pyramid.tests.test_config.pkgs.asset import subpackage\n        self.assertEqual(override.package, asset)\n        self.assertEqual(override.path, '')\n        source = override.source\n        self.assertTrue(isinstance(source, PackageAssetSource))\n        self.assertEqual(source.package, subpackage)\n        self.assertEqual(source.prefix, '')\n    \n        resource_name = 'templates/bar.pt'\n        expected = os.path.join(here, 'pkgs', 'asset',\n                                'subpackage', 'templates', 'bar.pt')\n>       self.assertEqual(override.source.get_filename(resource_name),\n                         expected)\nE       AssertionError: '/hom[90 chars]c047/pyramid/tests/test_config/pkgs/asset/subp[19 chars]r.pt' != '/hom[90 chars]c047/r2e_tests/test_config/pkgs/asset/subpacka[15 chars]r.pt'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/pyramid/tests/test_config/pkgs/asset/subpackage/templates/bar.pt\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/r2e_tests/test_config/pkgs/asset/subpackage/templates/bar.pt\nE       ?                                                                                                     ^^^\n\nr2e_tests/test_config/test_assets.py:83: AssertionError\n_________ TestOverrideProvider.test_get_resource_filename_no_overrides _________\n\nself = <r2e_tests.test_config.test_assets.TestOverrideProvider testMethod=test_get_resource_filename_no_overrides>\n\n    def test_get_resource_filename_no_overrides(self):\n        resource_name = 'test_assets.py'\n        import pyramid.tests.test_config\n        provider = self._makeOne(pyramid.tests.test_config)\n        expected = os.path.join(here, resource_name)\n        result = provider.get_resource_filename(None, resource_name)\n>       self.assertEqual(result, expected)\nE       AssertionError: '/hom[73 chars]538e2763ab6b78f1bc047/pyramid/tests/test_config/test_assets.py' != '/hom[73 chars]538e2763ab6b78f1bc047/r2e_tests/test_config/test_assets.py'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/pyramid/tests/test_config/test_assets.py\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/r2e_tests/test_config/test_assets.py\nE       ?                                                                                                     ^^^\n\nr2e_tests/test_config/test_assets.py:297: AssertionError\n____ TestOverrideProvider.test_get_resource_filename_override_returns_None _____\n\nself = <r2e_tests.test_config.test_assets.TestOverrideProvider testMethod=test_get_resource_filename_override_returns_None>\n\n    def test_get_resource_filename_override_returns_None(self):\n        overrides = DummyOverrides(None)\n        self._registerOverrides(overrides)\n        resource_name = 'test_assets.py'\n        import pyramid.tests.test_config\n        provider = self._makeOne(pyramid.tests.test_config)\n        expected = os.path.join(here, resource_name)\n        result = provider.get_resource_filename(None, resource_name)\n>       self.assertEqual(result, expected)\nE       AssertionError: '/hom[73 chars]538e2763ab6b78f1bc047/pyramid/tests/test_config/test_assets.py' != '/hom[73 chars]538e2763ab6b78f1bc047/r2e_tests/test_config/test_assets.py'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/pyramid/tests/test_config/test_assets.py\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/r2e_tests/test_config/test_assets.py\nE       ?                                                                                                     ^^^\n\nr2e_tests/test_config/test_assets.py:345: AssertionError\n___________________ TestPackageAssetSource.test_get_filename ___________________\n\nself = <r2e_tests.test_config.test_assets.TestPackageAssetSource testMethod=test_get_filename>\n\n    def test_get_filename(self):\n        source = self._makeOne('')\n>       self.assertEqual(source.get_filename('test_assets.py'),\n                         os.path.join(here, 'test_assets.py'))\nE       AssertionError: '/hom[73 chars]538e2763ab6b78f1bc047/pyramid/tests/test_config/test_assets.py' != '/hom[73 chars]538e2763ab6b78f1bc047/r2e_tests/test_config/test_assets.py'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/pyramid/tests/test_config/test_assets.py\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/r2e_tests/test_config/test_assets.py\nE       ?                                                                                                     ^^^\n\nr2e_tests/test_config/test_assets.py:716: AssertionError\n_____________ TestPackageAssetSource.test_get_filename_with_prefix _____________\n\nself = <r2e_tests.test_config.test_assets.TestPackageAssetSource testMethod=test_get_filename_with_prefix>\n\n    def test_get_filename_with_prefix(self):\n        source = self._makeOne('test_assets.py')\n>       self.assertEqual(source.get_filename(''),\n                         os.path.join(here, 'test_assets.py'))\nE       AssertionError: '/hom[73 chars]538e2763ab6b78f1bc047/pyramid/tests/test_config/test_assets.py' != '/hom[73 chars]538e2763ab6b78f1bc047/r2e_tests/test_config/test_assets.py'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/pyramid/tests/test_config/test_assets.py\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/r2e_tests/test_config/test_assets.py\nE       ?                                                                                                     ^^^\n\nr2e_tests/test_config/test_assets.py:721: AssertionError\n_________ TestI18NConfiguratorMixin.test_add_translation_dirs_abspath __________\n\nself = <r2e_tests.test_config.test_i18n.TestI18NConfiguratorMixin testMethod=test_add_translation_dirs_abspath>\n\n    def test_add_translation_dirs_abspath(self):\n        from pyramid.interfaces import ITranslationDirectories\n        config = self._makeOne(autocommit=True)\n>       config.add_translation_dirs(locale)\n\nr2e_tests/test_config/test_i18n.py:102: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \npyramid/config/util.py:64: in wrapper\n    result = wrapped(self, *arg, **kw)\npyramid/config/i18n.py:119: in add_translation_dirs\n    self.action(None, register, introspectables=introspectables)\npyramid/config/__init__.py:629: in action\n    callable(*args, **kw)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\n    def register():\n        directories = []\n        resolver = AssetResolver(self.package_name)\n    \n        # defer spec resolution until register to allow for asset\n        # overrides to take place in an earlier config phase\n        for spec in specs:\n            # the trailing slash helps match asset overrides for folders\n            if not spec.endswith('/'):\n                spec += '/'\n            asset = resolver.resolve(spec)\n            directory = asset.abspath()\n            if not asset.isdir():\n>               raise ConfigurationError('\"%s\" is not a directory' %\n                                        directory)\nE               pyramid.exceptions.ConfigurationError: \"/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/r2e_tests/pkgs/localeapp/locale\" is not a directory\n\npyramid/config/i18n.py:100: 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]bd1a538e2763ab6b78f1bc047/pyramid/tests/pkgs/localeapp/locale'] != ['/ho[70 chars]bd1a538e2763ab6b78f1bc047/r2e_tests/pkgs/localeapp/locale']\nE       \nE       First differing element 0:\nE       '/hom[68 chars]7bd1a538e2763ab6b78f1bc047/pyramid/tests/pkgs/localeapp/locale'\nE       '/hom[68 chars]7bd1a538e2763ab6b78f1bc047/r2e_tests/pkgs/localeapp/locale'\nE       \nE       - ['/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/pyramid/tests/pkgs/localeapp/locale']\nE       ?                                                                                                      -- ^^^^^\nE       \nE       + ['/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/r2e_tests/pkgs/localeapp/locale']\nE       ?                                                                                                       ^^^\n\nr2e_tests/test_config/test_i18n.py:53: 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]e2763ab6b78f1bc047/pyramid/tests/pkgs/localeapp/locale', 'abc'] != ['/ho[77 chars]e2763ab6b78f1bc047/r2e_tests/pkgs/localeapp/locale', 'abc']\nE       \nE       First differing element 0:\nE       '/hom[68 chars]7bd1a538e2763ab6b78f1bc047/pyramid/tests/pkgs/localeapp/locale'\nE       '/hom[68 chars]7bd1a538e2763ab6b78f1bc047/r2e_tests/pkgs/localeapp/locale'\nE       \nE       - ['/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/pyramid/tests/pkgs/localeapp/locale',\nE       ?                                                                                                      -- ^^^^^\nE       \nE       + ['/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/r2e_tests/pkgs/localeapp/locale',\nE       ?                                                                                                       ^^^\nE       \nE          'abc']\n\nr2e_tests/test_config/test_i18n.py:63: AssertionError\n_ TestI18NConfiguratorMixin.test_add_translation_dirs_doesnt_use_override_w_autocommit _\n\nself = <r2e_tests.test_config.test_i18n.TestI18NConfiguratorMixin testMethod=test_add_translation_dirs_doesnt_use_override_w_autocommit>\n\n    def test_add_translation_dirs_doesnt_use_override_w_autocommit(self):\n        from pyramid.interfaces import ITranslationDirectories\n        config = self._makeOne(autocommit=True)\n        config.add_translation_dirs('pyramid.tests.pkgs.localeapp:locale')\n        config.override_asset('pyramid.tests.pkgs.localeapp:locale/',\n                              'pyramid.tests.pkgs.localeapp:locale2/')\n>       self.assertEqual(config.registry.getUtility(ITranslationDirectories),\n                         [locale])\nE       AssertionError: Lists differ: ['/ho[70 chars]bd1a538e2763ab6b78f1bc047/pyramid/tests/pkgs/localeapp/locale'] != ['/ho[70 chars]bd1a538e2763ab6b78f1bc047/r2e_tests/pkgs/localeapp/locale']\nE       \nE       First differing element 0:\nE       '/hom[68 chars]7bd1a538e2763ab6b78f1bc047/pyramid/tests/pkgs/localeapp/locale'\nE       '/hom[68 chars]7bd1a538e2763ab6b78f1bc047/r2e_tests/pkgs/localeapp/locale'\nE       \nE       - ['/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/pyramid/tests/pkgs/localeapp/locale']\nE       ?                                                                                                      -- ^^^^^\nE       \nE       + ['/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/r2e_tests/pkgs/localeapp/locale']\nE       ?                                                                                                       ^^^\n\nr2e_tests/test_config/test_i18n.py:122: 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]c047/pyramid/tests/pkgs/localeapp/locale', '/h[130 chars]le2'] != ['/ho[91 chars]c047/r2e_tests/pkgs/localeapp/locale', '/home/[122 chars]le2']\nE       \nE       First differing element 0:\nE       '/hom[68 chars]7bd1a538e2763ab6b78f1bc047/pyramid/tests/pkgs/localeapp/locale'\nE       '/hom[68 chars]7bd1a538e2763ab6b78f1bc047/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:70: 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]c047/pyramid/tests/pkgs/localeapp/locale3', '/[269 chars]le2'] != ['/ho[91 chars]c047/r2e_tests/pkgs/localeapp/locale3', '/home[257 chars]le2']\nE       \nE       First differing element 0:\nE       '/hom[69 chars]bd1a538e2763ab6b78f1bc047/pyramid/tests/pkgs/localeapp/locale3'\nE       '/hom[69 chars]bd1a538e2763ab6b78f1bc047/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:79: AssertionError\n_ TestI18NConfiguratorMixin.test_add_translation_dirs_override_multiple_specs_multiple_calls _\n\nself = <r2e_tests.test_config.test_i18n.TestI18NConfiguratorMixin testMethod=test_add_translation_dirs_override_multiple_specs_multiple_calls>\n\n    def test_add_translation_dirs_override_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                                    override=True)\n>       self.assertEqual(config.registry.getUtility(ITranslationDirectories),\n                         [locale, locale2, locale3])\nE       AssertionError: Lists differ: ['/ho[91 chars]c047/pyramid/tests/pkgs/localeapp/locale', '/h[269 chars]le3'] != ['/ho[91 chars]c047/r2e_tests/pkgs/localeapp/locale', '/home/[257 chars]le3']\nE       \nE       First differing element 0:\nE       '/hom[68 chars]7bd1a538e2763ab6b78f1bc047/pyramid/tests/pkgs/localeapp/locale'\nE       '/hom[68 chars]7bd1a538e2763ab6b78f1bc047/r2e_tests/pkgs/localeapp/locale'\nE       \nE       Diff is 1504 characters long. Set self.maxDiff to None to see it.\n\nr2e_tests/test_config/test_i18n.py:89: AssertionError\n_ TestI18NConfiguratorMixin.test_add_translation_dirs_uses_override_out_of_order _\n\nself = <r2e_tests.test_config.test_i18n.TestI18NConfiguratorMixin testMethod=test_add_translation_dirs_uses_override_out_of_order>\n\n    def test_add_translation_dirs_uses_override_out_of_order(self):\n        from pyramid.interfaces import ITranslationDirectories\n        config = self._makeOne()\n        config.add_translation_dirs('pyramid.tests.pkgs.localeapp:locale')\n        config.override_asset('pyramid.tests.pkgs.localeapp:locale/',\n                              'pyramid.tests.pkgs.localeapp:locale2/')\n        config.commit()\n>       self.assertEqual(config.registry.getUtility(ITranslationDirectories),\n                         [locale2])\nE       AssertionError: Lists differ: ['/ho[71 chars]d1a538e2763ab6b78f1bc047/pyramid/tests/pkgs/localeapp/locale2'] != ['/ho[71 chars]d1a538e2763ab6b78f1bc047/r2e_tests/pkgs/localeapp/locale2']\nE       \nE       First differing element 0:\nE       '/hom[69 chars]bd1a538e2763ab6b78f1bc047/pyramid/tests/pkgs/localeapp/locale2'\nE       '/hom[69 chars]bd1a538e2763ab6b78f1bc047/r2e_tests/pkgs/localeapp/locale2'\nE       \nE       - ['/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/pyramid/tests/pkgs/localeapp/locale2']\nE       ?                                                                                                      -- ^^^^^\nE       \nE       + ['/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/r2e_tests/pkgs/localeapp/locale2']\nE       ?                                                                                                       ^^^\n\nr2e_tests/test_config/test_i18n.py:113: AssertionError\n_ TestI18NConfiguratorMixin.test_add_translation_dirs_uses_override_w_autocommit _\n\nself = <r2e_tests.test_config.test_i18n.TestI18NConfiguratorMixin testMethod=test_add_translation_dirs_uses_override_w_autocommit>\n\n    def test_add_translation_dirs_uses_override_w_autocommit(self):\n        from pyramid.interfaces import ITranslationDirectories\n        config = self._makeOne(autocommit=True)\n        config.override_asset('pyramid.tests.pkgs.localeapp:locale/',\n                              'pyramid.tests.pkgs.localeapp:locale2/')\n        config.add_translation_dirs('pyramid.tests.pkgs.localeapp:locale')\n>       self.assertEqual(config.registry.getUtility(ITranslationDirectories),\n                         [locale2])\nE       AssertionError: Lists differ: ['/ho[71 chars]d1a538e2763ab6b78f1bc047/pyramid/tests/pkgs/localeapp/locale2'] != ['/ho[71 chars]d1a538e2763ab6b78f1bc047/r2e_tests/pkgs/localeapp/locale2']\nE       \nE       First differing element 0:\nE       '/hom[69 chars]bd1a538e2763ab6b78f1bc047/pyramid/tests/pkgs/localeapp/locale2'\nE       '/hom[69 chars]bd1a538e2763ab6b78f1bc047/r2e_tests/pkgs/localeapp/locale2'\nE       \nE       - ['/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/pyramid/tests/pkgs/localeapp/locale2']\nE       ?                                                                                                      -- ^^^^^\nE       \nE       + ['/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/r2e_tests/pkgs/localeapp/locale2']\nE       ?                                                                                                       ^^^\n\nr2e_tests/test_config/test_i18n.py:131: AssertionError\n___________________ ConfiguratorTests.test_ctor_no_registry ____________________\n\nself = <r2e_tests.test_config.test_init.ConfiguratorTests testMethod=test_ctor_no_registry>\n\n    def test_ctor_no_registry(self):\n        import sys\n        from pyramid.interfaces import ISettings\n        from pyramid.config import Configurator\n        from pyramid.interfaces import IRendererFactory\n        config = Configurator()\n        this_pkg = sys.modules['pyramid.tests.test_config']\n        self.assertTrue(config.registry.getUtility(ISettings))\n>       self.assertEqual(config.package, this_pkg)\nE       AssertionError: <module 'r2e_tests.test_config' from '/home/gcpuse[117 chars].py'> != <module 'pyramid.tests.test_config' from '/home/gc[125 chars].py'>\n\nr2e_tests/test_config/test_init.py:68: AssertionError\n_________ ConfiguratorTests.test_ctor_noreg_debug_logger_None_default __________\n\nself = <r2e_tests.test_config.test_init.ConfiguratorTests testMethod=test_ctor_noreg_debug_logger_None_default>\n\n    def test_ctor_noreg_debug_logger_None_default(self):\n        from pyramid.interfaces import IDebugLogger\n        config = self._makeOne()\n        logger = config.registry.getUtility(IDebugLogger)\n>       self.assertEqual(logger.name, 'pyramid.tests.test_config')\nE       AssertionError: 'r2e_tests.test_config' != 'pyramid.tests.test_config'\nE       - r2e_tests.test_config\nE       ?  ^^^\nE       + pyramid.tests.test_config\nE       ? ++ ^^^^^\n\nr2e_tests/test_config/test_init.py:181: AssertionError\n_____________ ConfiguratorTests.test_include_constant_root_package _____________\n\nself = <r2e_tests.test_config.test_init.ConfiguratorTests testMethod=test_include_constant_root_package>\n\n    def test_include_constant_root_package(self):\n        from pyramid import tests\n        from pyramid.tests import test_config\n        config = self._makeOne(root_package=tests)\n        results = {}\n        def include(config):\n            results['package'] = config.package\n            results['root_package'] = config.root_package\n        config.include(include)\n        self.assertEqual(results['root_package'], tests)\n>       self.assertEqual(results['package'], test_config)\nE       AssertionError: <module 'r2e_tests.test_config' from '/home/gcpuse[117 chars].py'> != <module 'pyramid.tests.test_config' from '/home/gc[125 chars].py'>\n\nr2e_tests/test_config/test_init.py:834: 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:1106: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \npyramid/config/__init__.py:686: in commit\n    self.action_state.execute_actions(introspector=self.introspector)\npyramid/config/__init__.py:1186: in execute_actions\n    action = next(action_iter, None)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nactions = [{'args': (), 'callable': <function ViewsConfiguratorMixin.add_view.<locals>.register at 0x74e4dfe195e0>, 'discriminat...e4e01de310>, 'discriminator': ('view', None, 'two', None, 'd41d8cd98f00b204e9800998ecf8427e'), 'includepath': (), ...}]\nstate = <pyramid.config.ConflictResolverState object at 0x74e4e00b1d60>\n\n    def resolveConflicts(actions, state=None):\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    \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        Actions are resolved on a per-order basis because some discriminators\n        cannot be computed until earlier actions have executed. An action in an\n        earlier order may execute successfully only to find out later that it was\n        overridden by another action with a smaller include path. This will result\n        in a conflict as there is no way to revert the original action.\n    \n        ``state`` may be an instance of ``ConflictResolverState`` that\n        can be used to resume execution and resolve the new actions against the\n        list of executed actions from a previous call.\n    \n        \"\"\"\n        if state is None:\n            state = ConflictResolverState()\n    \n        # pick up where we left off last time, but track the new actions as well\n        state.remaining_actions.extend(normalize_actions(actions))\n        actions = state.remaining_actions\n    \n        def orderandpos(v):\n            n, v = v\n            return (v['order'] or 0, n)\n    \n        def orderonly(v):\n            n, v = v\n            return v['order'] or 0\n    \n        sactions = sorted(enumerate(actions, start=state.start), key=orderandpos)\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            output = []\n            unique = {}\n    \n            # error out if we went backward in order\n            if state.min_order is not None and order < state.min_order:\n                r = ['Actions were added to order={0} after execution had moved '\n                     'on to order={1}. Conflicting actions: '\n                     .format(order, state.min_order)]\n                for i, action in actiongroup:\n                    for line in str(action['info']).rstrip().split('\\n'):\n                        r.append(\"  \" + line)\n                raise ConfigurationError('\\n'.join(r))\n    \n            for i, action in actiongroup:\n                # Within an order, actions are executed sequentially based on\n                # original action ordering (\"i\").\n    \n                # \"ainfo\" is a tuple of (i, action) where \"i\" is an integer\n                # expressing the relative position of this action in the action\n                # list being resolved, and \"action\" is an action dictionary.  The\n                # purpose of an ainfo is to associate an \"i\" with a particular\n                # action; \"i\" exists for sorting after conflict resolution.\n                ainfo = (i, action)\n    \n                # wait to defer discriminators until we are on their order because\n                # the discriminator may depend on state from a previous order\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            for discriminator, ainfos in unique.items():\n                # We use (includepath, 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 \"i\".\n                def bypath(ainfo):\n                    path, i = ainfo[1]['includepath'], ainfo[0]\n                    return path, order, i\n    \n                ainfos.sort(key=bypath)\n                ainfo, rest = ainfos[0], ainfos[1:]\n                _, action = ainfo\n    \n                # ensure this new action does not conflict with a previously\n                # resolved action from an earlier order / invocation\n                prev_ainfo = state.resolved_ainfos.get(discriminator)\n                if prev_ainfo is not None:\n                    _, paction = prev_ainfo\n                    basepath, baseinfo = paction['includepath'], paction['info']\n                    includepath = action['includepath']\n                    # if the new action conflicts with the resolved action then\n                    # note the conflict, otherwise drop the action as it's\n                    # effectively overriden by the previous action\n                    if (includepath[:len(basepath)] != basepath or\n                            includepath == basepath):\n                        L = conflicts.setdefault(discriminator, [baseinfo])\n                        L.append(action['info'])\n    \n                else:\n                    output.append(ainfo)\n    \n                basepath, baseinfo = action['includepath'], action['info']\n                for _, action in rest:\n                    includepath = action['includepath']\n                    # Test whether path is a prefix of opath\n                    if (includepath[:len(basepath)] != basepath or  # not a prefix\n                            includepath == basepath):\n                        L = conflicts.setdefault(discriminator, [baseinfo])\n                        L.append(action['info'])\n    \n            if conflicts:\n>               raise ConfigurationConflictError(conflicts)\nE               pyramid.exceptions.ConfigurationConflictError: Conflicting configuration actions\nE                 For: ('view', None, '', None, 'd41d8cd98f00b204e9800998ecf8427e')\nE                   Line 4 of file /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/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_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/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_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/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_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/pyramid/tests/test_config/pkgs/selfscan/another.py:\nE                       def two(request):\n\npyramid/config/__init__.py:1368: 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:1115: 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:501: 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:1314: 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:1301: 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:1288: 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:1327: 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:1391: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \npyramid/config/__init__.py:559: in _add_predicate\n    self.action(discriminator, register, introspectables=(intr,),\nr2e_tests/test_config/test_init.py:1388: 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]4e4dfcee220>, 'static', 'r2e_tests.test_config:files', {})] != [(<py[39 chars]4e4dfcee220>, 'static', 'pyramid.tests.test_config:files', {})]\nE       \nE       First differing element 0:\nE       (<pyr[37 chars]74e4dfcee220>, 'static', 'r2e_tests.test_config:files', {})\nE       (<pyr[37 chars]74e4dfcee220>, 'static', 'pyramid.tests.test_config:files', {})\nE       \nE         [(<pyramid.config.Configurator object at 0x74e4dfcee220>,\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:2066: 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:1187: 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:1228: AssertionError\n_________ TestStaticURLInfo.test_generate_url_cachebust_with_overrides _________\n\nself = <r2e_tests.test_config.test_views.TestStaticURLInfo testMethod=test_generate_url_cachebust_with_overrides>\n\n    def test_generate_url_cachebust_with_overrides(self):\n        config = testing.setUp()\n        try:\n            request = testing.DummyRequest()\n            config.add_static_view('static', 'path')\n            config.override_asset(\n                'pyramid.tests.test_config:path/',\n                'pyramid.tests.test_config:other_path/')\n            def cb(val):\n                def cb_(request, subpath, kw):\n                    kw['_query'] = {'x': val}\n                    return subpath, kw\n                return cb_\n            config.add_cache_buster('path', cb('foo'))\n            result = request.static_url('path/foo.png')\n            self.assertEqual(result, 'http://example.com/static/foo.png?x=foo')\n            config.add_cache_buster('other_path', cb('bar'), explicit=True)\n            result = request.static_url('path/foo.png')\n>           self.assertEqual(result, 'http://example.com/static/foo.png?x=bar')\nE           AssertionError: 'http://example.com/static/foo.png?x=foo' != 'http://example.com/static/foo.png?x=bar'\nE           - http://example.com/static/foo.png?x=foo\nE           ?                                     ^^^\nE           + http://example.com/static/foo.png?x=bar\nE           ?                                     ^^^\n\nr2e_tests/test_config/test_views.py:3214: 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:3385: AssertionError\n_________ TestPRoutesCommand.test_one_route_all_methods_view_only_post _________\n\nself = <r2e_tests.test_scripts.test_proutes.TestPRoutesCommand testMethod=test_one_route_all_methods_view_only_post>\n\n    def test_one_route_all_methods_view_only_post(self):\n        from pyramid.renderers import null_renderer as nr\n    \n        def view1(context, request): return 'view1'\n    \n        config = self._makeConfig(autocommit=True)\n        config.add_route('foo', '/a/b')\n        config.add_view(\n            route_name='foo',\n            view=view1,\n            renderer=nr,\n            request_method='POST'\n        )\n    \n        command = self._makeOne()\n        L = []\n        command.out = L.append\n        command.bootstrap = dummy.DummyBootstrap(registry=config.registry)\n        result = command.run()\n        self.assertEqual(result, 0)\n        self.assertEqual(len(L), 3)\n        compare_to = L[-1].split()\n        expected = [\n            'foo', '/a/b',\n            'pyramid.tests.test_scripts.test_proutes.view1', 'POST'\n        ]\n>       self.assertEqual(compare_to, expected)\nE       AssertionError: Lists differ: ['foo', '/a/b', 'r2e_tests.test_scripts.test_proutes.view1', 'POST'] != ['foo', '/a/b', 'pyramid.tests.test_scripts.test_proutes.view1', 'POST']\nE       \nE       First differing element 2:\nE       'r2e_tests.test_scripts.test_proutes.view1'\nE       'pyramid.tests.test_scripts.test_proutes.view1'\nE       \nE       - ['foo', '/a/b', 'r2e_tests.test_scripts.test_proutes.view1', 'POST']\nE       ?                   ^^^\nE       \nE       + ['foo', '/a/b', 'pyramid.tests.test_scripts.test_proutes.view1', 'POST']\nE       ?                  ++ ^^^^^\n\nr2e_tests/test_scripts/test_proutes.py:342: AssertionError\n_________ TestPRoutesCommand.test_one_route_only_post_view_all_methods _________\n\nself = <r2e_tests.test_scripts.test_proutes.TestPRoutesCommand testMethod=test_one_route_only_post_view_all_methods>\n\n    def test_one_route_only_post_view_all_methods(self):\n        from pyramid.renderers import null_renderer as nr\n    \n        def view1(context, request): return 'view1'\n    \n        config = self._makeConfig(autocommit=True)\n        config.add_route('foo', '/a/b', request_method='POST')\n        config.add_view(\n            route_name='foo',\n            view=view1,\n            renderer=nr,\n        )\n    \n        command = self._makeOne()\n        L = []\n        command.out = L.append\n        command.bootstrap = dummy.DummyBootstrap(registry=config.registry)\n        result = command.run()\n        self.assertEqual(result, 0)\n        self.assertEqual(len(L), 3)\n        compare_to = L[-1].split()\n        expected = [\n            'foo', '/a/b',\n            'pyramid.tests.test_scripts.test_proutes.view1', 'POST'\n        ]\n>       self.assertEqual(compare_to, expected)\nE       AssertionError: Lists differ: ['foo', '/a/b', 'r2e_tests.test_scripts.test_proutes.view1', 'POST'] != ['foo', '/a/b', 'pyramid.tests.test_scripts.test_proutes.view1', 'POST']\nE       \nE       First differing element 2:\nE       'r2e_tests.test_scripts.test_proutes.view1'\nE       'pyramid.tests.test_scripts.test_proutes.view1'\nE       \nE       - ['foo', '/a/b', 'r2e_tests.test_scripts.test_proutes.view1', 'POST']\nE       ?                   ^^^\nE       \nE       + ['foo', '/a/b', 'pyramid.tests.test_scripts.test_proutes.view1', 'POST']\nE       ?                  ++ ^^^^^\n\nr2e_tests/test_scripts/test_proutes.py:369: AssertionError\n________ TestPRoutesCommand.test_one_route_only_post_view_post_and_get _________\n\nself = <r2e_tests.test_scripts.test_proutes.TestPRoutesCommand testMethod=test_one_route_only_post_view_post_and_get>\n\n    def test_one_route_only_post_view_post_and_get(self):\n        from pyramid.renderers import null_renderer as nr\n    \n        def view1(context, request): return 'view1'\n    \n        config = self._makeConfig(autocommit=True)\n        config.add_route('foo', '/a/b', request_method='POST')\n        config.add_view(\n            route_name='foo',\n            view=view1,\n            renderer=nr,\n            request_method=('POST', 'GET')\n        )\n    \n        command = self._makeOne()\n        L = []\n        command.out = L.append\n        command.bootstrap = dummy.DummyBootstrap(registry=config.registry)\n        result = command.run()\n        self.assertEqual(result, 0)\n        self.assertEqual(len(L), 3)\n        compare_to = L[-1].split()\n        expected = [\n            'foo', '/a/b',\n            'pyramid.tests.test_scripts.test_proutes.view1', 'POST'\n        ]\n>       self.assertEqual(compare_to, expected)\nE       AssertionError: Lists differ: ['foo', '/a/b', 'r2e_tests.test_scripts.test_proutes.view1', 'POST'] != ['foo', '/a/b', 'pyramid.tests.test_scripts.test_proutes.view1', 'POST']\nE       \nE       First differing element 2:\nE       'r2e_tests.test_scripts.test_proutes.view1'\nE       'pyramid.tests.test_scripts.test_proutes.view1'\nE       \nE       - ['foo', '/a/b', 'r2e_tests.test_scripts.test_proutes.view1', 'POST']\nE       ?                   ^^^\nE       \nE       + ['foo', '/a/b', 'pyramid.tests.test_scripts.test_proutes.view1', 'POST']\nE       ?                  ++ ^^^^^\n\nr2e_tests/test_scripts/test_proutes.py:397: AssertionError\n_____ TestPRoutesCommand.test_one_route_with_long_name_one_view_registered _____\n\nself = <r2e_tests.test_scripts.test_proutes.TestPRoutesCommand testMethod=test_one_route_with_long_name_one_view_registered>\n\n    def test_one_route_with_long_name_one_view_registered(self):\n        from zope.interface import Interface\n        from pyramid.interfaces import IRouteRequest\n        from pyramid.interfaces import IViewClassifier\n        from pyramid.interfaces import IView\n        registry = self._makeRegistry()\n    \n        def view():pass\n    \n        class IMyRoute(Interface):\n            pass\n    \n        registry.registerAdapter(\n            view,\n            (IViewClassifier, IMyRoute, Interface),\n            IView, ''\n        )\n    \n        registry.registerUtility(IMyRoute, IRouteRequest,\n                                 name='very_long_name_123')\n    \n        command = self._makeOne()\n        route = dummy.DummyRoute(\n            'very_long_name_123',\n            '/and_very_long_pattern_as_well'\n        )\n        mapper = dummy.DummyMapper(route)\n        command._get_mapper = lambda *arg: mapper\n        L = []\n        command.out = L.append\n        command.bootstrap = dummy.DummyBootstrap(registry=registry)\n        result = command.run()\n        self.assertEqual(result, 0)\n        self.assertEqual(len(L), 3)\n        compare_to = L[-1].split()[:3]\n>       self.assertEqual(\n            compare_to,\n            ['very_long_name_123',\n             '/and_very_long_pattern_as_well',\n             'pyramid.tests.test_scripts.test_proutes.view']\n        )\nE       AssertionError: Lists differ: ['ver[36 chars]ttern_as_well', 'r2e_tests.test_scripts.test_proutes.view'] != ['ver[36 chars]ttern_as_well', 'pyramid.tests.test_scripts.test_proutes.view']\nE       \nE       First differing element 2:\nE       'r2e_tests.test_scripts.test_proutes.view'\nE       'pyramid.tests.test_scripts.test_proutes.view'\nE       \nE         ['very_long_name_123',\nE          '/and_very_long_pattern_as_well',\nE       -  'r2e_tests.test_scripts.test_proutes.view']\nE       ?    ^^^\nE       \nE       +  'pyramid.tests.test_scripts.test_proutes.view']\nE       ?   ++ ^^^^^\n\nr2e_tests/test_scripts/test_proutes.py:201: AssertionError\n______ TestPRoutesCommand.test_route_is_get_view_request_method_not_post _______\n\nself = <r2e_tests.test_scripts.test_proutes.TestPRoutesCommand testMethod=test_route_is_get_view_request_method_not_post>\n\n    def test_route_is_get_view_request_method_not_post(self):\n        from pyramid.renderers import null_renderer as nr\n        from pyramid.config import not_\n    \n        def view1(context, request): return 'view1'\n    \n        config = self._makeConfig(autocommit=True)\n        config.add_route('foo', '/a/b', request_method='GET')\n        config.add_view(\n            route_name='foo',\n            view=view1,\n            renderer=nr,\n            request_method=not_('POST')\n        )\n    \n        command = self._makeOne()\n        L = []\n        command.out = L.append\n        command.bootstrap = dummy.DummyBootstrap(registry=config.registry)\n        result = command.run()\n        self.assertEqual(result, 0)\n        self.assertEqual(len(L), 3)\n        compare_to = L[-1].split()\n        expected = [\n            'foo', '/a/b',\n            'pyramid.tests.test_scripts.test_proutes.view1',\n            'GET'\n        ]\n>       self.assertEqual(compare_to, expected)\nE       AssertionError: Lists differ: ['foo', '/a/b', 'r2e_tests.test_scripts.test_proutes.view1', 'GET'] != ['foo', '/a/b', 'pyramid.tests.test_scripts.test_proutes.view1', 'GET']\nE       \nE       First differing element 2:\nE       'r2e_tests.test_scripts.test_proutes.view1'\nE       'pyramid.tests.test_scripts.test_proutes.view1'\nE       \nE       - ['foo', '/a/b', 'r2e_tests.test_scripts.test_proutes.view1', 'GET']\nE       ?                   ^^^\nE       \nE       + ['foo', '/a/b', 'pyramid.tests.test_scripts.test_proutes.view1', 'GET']\nE       ?                  ++ ^^^^^\n\nr2e_tests/test_scripts/test_proutes.py:537: AssertionError\n____________ TestPRoutesCommand.test_route_request_method_mismatch _____________\n\nself = <r2e_tests.test_scripts.test_proutes.TestPRoutesCommand testMethod=test_route_request_method_mismatch>\n\n    def test_route_request_method_mismatch(self):\n        from pyramid.renderers import null_renderer as nr\n    \n        def view1(context, request): return 'view1'\n    \n        config = self._makeConfig(autocommit=True)\n        config.add_route('foo', '/a/b', request_method='POST')\n        config.add_view(\n            route_name='foo',\n            view=view1,\n            renderer=nr,\n            request_method='GET'\n        )\n    \n        command = self._makeOne()\n        L = []\n        command.out = L.append\n        command.bootstrap = dummy.DummyBootstrap(registry=config.registry)\n        result = command.run()\n        self.assertEqual(result, 0)\n        self.assertEqual(len(L), 3)\n        compare_to = L[-1].split()\n        expected = [\n            'foo', '/a/b',\n            'pyramid.tests.test_scripts.test_proutes.view1',\n            '<route', 'mismatch>'\n        ]\n>       self.assertEqual(compare_to, expected)\nE       AssertionError: Lists differ: ['foo', '/a/b', 'r2e_tests.test_scripts.test_proutes.view1[20 chars]ch>'] != ['foo', '/a/b', 'pyramid.tests.test_scripts.test_proutes.v[24 chars]ch>']\nE       \nE       First differing element 2:\nE       'r2e_tests.test_scripts.test_proutes.view1'\nE       'pyramid.tests.test_scripts.test_proutes.view1'\nE       \nE         ['foo',\nE          '/a/b',\nE       -  'r2e_tests.test_scripts.test_proutes.view1',\nE       ?    ^^^\nE       \nE       +  'pyramid.tests.test_scripts.test_proutes.view1',\nE       ?   ++ ^^^^^\nE       \nE          '<route',\nE          'mismatch>']\n\nr2e_tests/test_scripts/test_proutes.py:426: AssertionError\n__________________ TestPRoutesCommand.test_route_static_views __________________\n\nself = <r2e_tests.test_scripts.test_proutes.TestPRoutesCommand testMethod=test_route_static_views>\n\n    def test_route_static_views(self):\n        from pyramid.renderers import null_renderer as nr\n        config = self._makeConfig(autocommit=True)\n        config.add_static_view('static', 'static', cache_max_age=3600)\n        path2 = os.path.normpath('/var/www/static')\n        config.add_static_view(name='static2', path=path2)\n        config.add_static_view(\n            name='pyramid_scaffold',\n            path='pyramid:scaffolds/starter/+package+/static'\n        )\n    \n        command = self._makeOne()\n        L = []\n        command.out = L.append\n        command.bootstrap = dummy.DummyBootstrap(registry=config.registry)\n        result = command.run()\n        self.assertEqual(result, 0)\n        self.assertEqual(len(L), 5)\n    \n        expected = [\n            ['__static/', '/static/*subpath',\n             'pyramid.tests.test_scripts:static/', '*'],\n            ['__static2/', '/static2/*subpath', path2 + os.sep, '*'],\n            ['__pyramid_scaffold/', '/pyramid_scaffold/*subpath',\n             'pyramid:scaffolds/starter/+package+/static/',  '*'],\n        ]\n    \n        for index, line in enumerate(L[2:]):\n            data = line.split()\n>           self.assertEqual(data, expected[index])\nE           AssertionError: Lists differ: ['__static/', '/static/*subpath', 'r2e_tests.test_scripts:static/', '*'] != ['__static/', '/static/*subpath', 'pyramid.tests.test_scripts:static/', '*']\nE           \nE           First differing element 2:\nE           'r2e_tests.test_scripts:static/'\nE           'pyramid.tests.test_scripts:static/'\nE           \nE           - ['__static/', '/static/*subpath', 'r2e_tests.test_scripts:static/', '*']\nE           ?                                     ^^^\nE           \nE           + ['__static/', '/static/*subpath', 'pyramid.tests.test_scripts:static/', '*']\nE           ?                                    ++ ^^^^^\n\nr2e_tests/test_scripts/test_proutes.py:457: AssertionError\n___________ TestPRoutesCommand.test_single_route_one_view_registered ___________\n\nself = <r2e_tests.test_scripts.test_proutes.TestPRoutesCommand testMethod=test_single_route_one_view_registered>\n\n    def test_single_route_one_view_registered(self):\n        from zope.interface import Interface\n        from pyramid.interfaces import IRouteRequest\n        from pyramid.interfaces import IViewClassifier\n        from pyramid.interfaces import IView\n        registry = self._makeRegistry()\n    \n        def view():pass\n        class IMyRoute(Interface):\n            pass\n        registry.registerAdapter(view,\n                                 (IViewClassifier, IMyRoute, Interface),\n                                 IView, '')\n        registry.registerUtility(IMyRoute, IRouteRequest, name='a')\n        command = self._makeOne()\n        route = dummy.DummyRoute('a', '/a')\n        mapper = dummy.DummyMapper(route)\n        command._get_mapper = lambda *arg: mapper\n        L = []\n        command.out = L.append\n        command.bootstrap = dummy.DummyBootstrap(registry=registry)\n        result = command.run()\n        self.assertEqual(result, 0)\n        self.assertEqual(len(L), 3)\n        compare_to = L[-1].split()[:3]\n>       self.assertEqual(\n            compare_to,\n            ['a', '/a', 'pyramid.tests.test_scripts.test_proutes.view']\n        )\nE       AssertionError: Lists differ: ['a', '/a', 'r2e_tests.test_scripts.test_proutes.view'] != ['a', '/a', 'pyramid.tests.test_scripts.test_proutes.view']\nE       \nE       First differing element 2:\nE       'r2e_tests.test_scripts.test_proutes.view'\nE       'pyramid.tests.test_scripts.test_proutes.view'\nE       \nE       - ['a', '/a', 'r2e_tests.test_scripts.test_proutes.view']\nE       ?               ^^^\nE       \nE       + ['a', '/a', 'pyramid.tests.test_scripts.test_proutes.view']\nE       ?              ++ ^^^^^\n\nr2e_tests/test_scripts/test_proutes.py:161: AssertionError\n______________________ TestPRoutesCommand.test_view_glob _______________________\n\nself = <r2e_tests.test_scripts.test_proutes.TestPRoutesCommand testMethod=test_view_glob>\n\n    def test_view_glob(self):\n        from pyramid.renderers import null_renderer as nr\n        from pyramid.config import not_\n    \n        def view1(context, request): return 'view1'\n        def view2(context, request): return 'view2'\n    \n        config = self._makeConfig(autocommit=True)\n        config.add_route('foo', '/a/b')\n        config.add_view(\n            route_name='foo',\n            view=view1,\n            renderer=nr,\n            request_method=not_('POST')\n        )\n    \n        config.add_route('bar', '/b/a')\n        config.add_view(\n            route_name='bar',\n            view=view2,\n            renderer=nr,\n            request_method=not_('POST')\n        )\n    \n        command = self._makeOne()\n        command.args.glob = '*foo*'\n    \n        L = []\n        command.out = L.append\n        command.bootstrap = dummy.DummyBootstrap(registry=config.registry)\n        result = command.run()\n        self.assertEqual(result, 0)\n        self.assertEqual(len(L), 3)\n        compare_to = L[-1].split()\n        expected = [\n            'foo', '/a/b',\n            'pyramid.tests.test_scripts.test_proutes.view1',\n            '!POST,*'\n        ]\n>       self.assertEqual(compare_to, expected)\nE       AssertionError: Lists differ: ['foo', '/a/b', 'r2e_tests.test_scripts.test_proutes.view1', '!POST,*'] != ['foo', '/a/b', 'pyramid.tests.test_scripts.test_proutes.view1', '!POST,*']\nE       \nE       First differing element 2:\nE       'r2e_tests.test_scripts.test_proutes.view1'\nE       'pyramid.tests.test_scripts.test_proutes.view1'\nE       \nE       - ['foo', '/a/b', 'r2e_tests.test_scripts.test_proutes.view1', '!POST,*']\nE       ?                   ^^^\nE       \nE       + ['foo', '/a/b', 'pyramid.tests.test_scripts.test_proutes.view1', '!POST,*']\nE       ?                  ++ ^^^^^\n\nr2e_tests/test_scripts/test_proutes.py:608: AssertionError\n_____________ TestPRoutesCommand.test_view_request_method_not_post _____________\n\nself = <r2e_tests.test_scripts.test_proutes.TestPRoutesCommand testMethod=test_view_request_method_not_post>\n\n    def test_view_request_method_not_post(self):\n        from pyramid.renderers import null_renderer as nr\n        from pyramid.config import not_\n    \n        def view1(context, request): return 'view1'\n    \n        config = self._makeConfig(autocommit=True)\n        config.add_route('foo', '/a/b')\n        config.add_view(\n            route_name='foo',\n            view=view1,\n            renderer=nr,\n            request_method=not_('POST')\n        )\n    \n        command = self._makeOne()\n        L = []\n        command.out = L.append\n        command.bootstrap = dummy.DummyBootstrap(registry=config.registry)\n        result = command.run()\n        self.assertEqual(result, 0)\n        self.assertEqual(len(L), 3)\n        compare_to = L[-1].split()\n        expected = [\n            'foo', '/a/b',\n            'pyramid.tests.test_scripts.test_proutes.view1',\n            '!POST,*'\n        ]\n>       self.assertEqual(compare_to, expected)\nE       AssertionError: Lists differ: ['foo', '/a/b', 'r2e_tests.test_scripts.test_proutes.view1', '!POST,*'] != ['foo', '/a/b', 'pyramid.tests.test_scripts.test_proutes.view1', '!POST,*']\nE       \nE       First differing element 2:\nE       'r2e_tests.test_scripts.test_proutes.view1'\nE       'pyramid.tests.test_scripts.test_proutes.view1'\nE       \nE       - ['foo', '/a/b', 'r2e_tests.test_scripts.test_proutes.view1', '!POST,*']\nE       ?                   ^^^\nE       \nE       + ['foo', '/a/b', 'pyramid.tests.test_scripts.test_proutes.view1', '!POST,*']\nE       ?                  ++ ^^^^^\n\nr2e_tests/test_scripts/test_proutes.py:567: AssertionError\n_____________ TestPServeCommand.test_config_file_finds_watch_files _____________\n\nself = <r2e_tests.test_scripts.test_pserve.TestPServeCommand testMethod=test_config_file_finds_watch_files>\n\n    def test_config_file_finds_watch_files(self):\n        inst = self._makeOne('development.ini')\n        loader = self.loader('/base/path.ini')\n        loader.settings = {'pserve': {\n            'watch_files': 'foo\\n/baz\\npyramid.tests.test_scripts:*.py',\n        }}\n        inst.pserve_file_config(loader, global_conf={'a': '1'})\n        self.assertEqual(loader.calls[0]['defaults'], {\n            'a': '1',\n        })\n>       self.assertEqual(inst.watch_files, set([\n            os.path.abspath('/base/foo'),\n            os.path.abspath('/baz'),\n            os.path.abspath(os.path.join(here, '*.py')),\n        ]))\nE       AssertionError: Items in the first set but not the second:\nE       '/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/pyramid/tests/test_scripts/*.py'\nE       Items in the second set but not the first:\nE       '/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/r2e_tests/test_scripts/*.py'\n\nr2e_tests/test_scripts/test_pserve.py:64: 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.config_uri = '/foo/bar/myapp.ini#myapp'\n        command.args.url = '/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:301: 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_cookie_max_age_invalid\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_invalid\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_str_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_invalid\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test_timeout_never\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test_timeout_str\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_bad_pickle\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_cookie_max_age_invalid\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_invalid\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_str_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_invalid\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_timeout_never\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_timeout_str\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_invalid\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test_timeout_never\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test_timeout_str\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_serialize::test_it_with_highorder_secret\nPASSED r2e_tests/test_1.py::Test_signed_serialize::test_it_with_latin1_secret\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_1.py::Test_signed_deserialize::test_it_with_highorder_secret\nPASSED r2e_tests/test_1.py::Test_signed_deserialize::test_it_with_latin1_secret\nPASSED r2e_tests/test_1.py::TestPickleSerializer::test_dumps\nPASSED r2e_tests/test_1.py::TestPickleSerializer::test_loads_raises_ValueError_on_bad_import\nPASSED r2e_tests/test_1.py::TestPickleSerializer::test_loads_raises_ValueError_on_invalid_data\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_object_event_subscriber\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_resource_url_default_resource_iface_means_Interface\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_resource_url_nodefault_resource_iface\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_response_adapter\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_response_adapter_dottednames\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_response_adapter_self\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_subscriber_defaults\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_subscriber_dottednames\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_subscriber_iface_specified\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_subscriber_predicate\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_subscriber_with_default_type_predicates_False\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_subscriber_with_default_type_predicates_True\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_subscriber_with_specific_type_and_predicates_False\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_subscriber_with_specific_type_and_predicates_True\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_traverser_default_iface_means_Interface\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_traverser_introspectables\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_traverser_nondefault_iface\nPASSED r2e_tests/test_config/test_adapters.py::Test_eventonly::test_defaults\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test__override_already_registered\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test__override_not_yet_registered\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_directory_with_absdirectory\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_directory_with_absfile\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_directory_with_file\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_file_with_absdirectory\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_file_with_absfile\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_file_with_directory\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_file_with_missing_abspath\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_file_with_package\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_package_with_absdirectory\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_samename\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_filename_override_returns_value\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_stream_no_overrides\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_stream_override_returns_None\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_stream_override_returns_value\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_string_no_overrides\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_string_override_returns_None\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_string_override_returns_value\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_has_resource_no_overrides\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_has_resource_override_returns_None\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_has_resource_override_returns_True\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_resource_isdir_no_overrides\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_resource_isdir_override_returns_False\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_resource_isdir_override_returns_None\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_resource_listdir_no_overrides\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_resource_listdir_override_returns_None\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_resource_listdir_override_returns_values\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_class_conforms_to_IPEP302Loader\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_class_conforms_to_IPackageOverrides\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_ctor_package_already_has_loader_of_different_type\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_ctor_package_already_has_loader_of_same_type\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_ctor_registers_loader_type\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_ctor_sets_loader\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_ctor_sets_local_state\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_filtered_sources\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_get_code_pkg_has___loader__\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_get_code_pkg_has_no___loader__\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_get_data_pkg_has___loader__\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_get_data_pkg_has_no___loader__\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_get_filename\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_get_filename_file_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_get_source_pkg_has___loader__\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_get_source_pkg_has_no___loader__\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_get_stream\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_get_stream_file_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_get_string\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_get_string_file_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_has_resource\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_has_resource_file_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_insert_directory\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_insert_emptystring\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_insert_file\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_instance_conforms_to_IPEP302Loader\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_instance_conforms_to_IPackageOverrides\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_is_package_pkg_has___loader__\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_is_package_pkg_has_no___loader__\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_isdir_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_isdir_false\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_isdir_true\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_listdir\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_listdir_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_exists\nPASSED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_exists_file_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_exists_with_prefix\nPASSED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_get_filename_file_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_get_stream\nPASSED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_get_stream_file_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_get_stream_with_prefix\nPASSED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_get_string\nPASSED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_get_string_file_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_get_string_with_prefix\nPASSED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_isdir_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_isdir_false\nPASSED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_isdir_true\nPASSED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_listdir\nPASSED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_listdir_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_exists\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_exists_file_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_exists_with_prefix\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_get_filename\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_get_filename_file_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_get_filename_with_prefix\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_get_stream\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_get_stream_file_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_get_stream_with_prefix\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_get_string\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_get_string_file_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_get_string_with_prefix\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_isdir_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_isdir_false\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_isdir_true\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_listdir\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_listdir_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestDirectoryOverride::test_it_match\nPASSED r2e_tests/test_config/test_assets.py::TestDirectoryOverride::test_it_no_match\nPASSED r2e_tests/test_config/test_assets.py::TestFileOverride::test_it_match\nPASSED r2e_tests/test_config/test_assets.py::TestFileOverride::test_it_no_match\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_add_request_method_with_None_callable\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_add_request_method_with_None_callable_and_no_name\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_add_request_method_with_None_callable_conflict\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_add_request_method_with_callable\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_add_request_method_with_text_type_name\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_add_request_method_with_unnamed_callable\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_execution_policy\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_execution_policy_to_None\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_multiple_request_methods_conflict\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_request_factory\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_request_factory_dottedname\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_response_factory\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_response_factory_dottedname\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_root_factory\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_root_factory_as_None\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_root_factory_dottedname\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_session_factory\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_session_factory_dottedname\nPASSED r2e_tests/test_config/test_factories.py::TestDeprecatedFactoriesMixinMethods::test_set_multiple_request_properties\nPASSED r2e_tests/test_config/test_factories.py::TestDeprecatedFactoriesMixinMethods::test_set_multiple_request_properties_conflict\nPASSED r2e_tests/test_config/test_factories.py::TestDeprecatedFactoriesMixinMethods::test_set_request_property_with_callable\nPASSED r2e_tests/test_config/test_factories.py::TestDeprecatedFactoriesMixinMethods::test_set_request_property_with_property\nPASSED r2e_tests/test_config/test_factories.py::TestDeprecatedFactoriesMixinMethods::test_set_request_property_with_unnamed_callable\nPASSED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_add_translation_dirs_invalid_kwargs\nPASSED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_add_translation_dirs_missing_dir\nPASSED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_add_translation_dirs_no_specs\nPASSED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_set_locale_negotiator\nPASSED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_set_locale_negotiator_dottedname\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test___getattr__matches\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test___getattr__matches_no_action_wrap\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test___getattr__missing_when_directives_dont_exist\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test___getattr__missing_when_directives_exist\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test__fix_registry_adds__lock\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test__fix_registry_adds_clear_view_lookup_cache\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test__fix_registry_has_listeners\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test__fix_registry_notify\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test__fix_registry_queryAdapterOrSelf\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test__fix_registry_registerSelfAdapter\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_absolute_asset_spec_already_absolute\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_absolute_asset_spec_notastring\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_absolute_asset_spec_relative\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_action_autocommit_with_introspectables\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_action_autocommit_with_introspectables_introspection_off\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_action_branching_kw_is_None\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_action_branching_kw_is_not_None\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_action_branching_nonautocommit_with_config_info\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_action_branching_nonautocommit_with_introspectables\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_action_branching_nonautocommit_without_config_info\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_action_nonautocommit_with_introspectables_introspection_off\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_autocommit_no_conflicts\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_begin\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_begin_does_not_propagate_request_for_diff_registry\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_begin_overrides_request\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_begin_propagates_request_for_same_registry\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_context_manager\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_threadlocals_active\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_include_with_dotted_name\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_include_with_missing_source_file\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_include_with_module_defaults_to_includeme\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_include_with_module_defaults_to_includeme_missing\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_include_with_nested_route_prefix\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_include_with_python_callable\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_include_with_route_prefix\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_introspector_decorator\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_make_wsgi_app\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_maybe_dotted_notstring_success\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_maybe_dotted_string_fail\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_maybe_dotted_string_success\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_scan_integration\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_scan_integration_dottedname_package\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_scan_integration_with_extra_kw\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_scan_integration_with_ignore\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_scan_integration_with_onerror\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_alternate_renderers\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_authentication_policy\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_authentication_policy_dottedname\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_authorization_policy_dottedname\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_authorization_policy_only\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_calls_fix_registry\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_custom_settings\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_debug_logger_name\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_debug_logger_non_None\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_default_permission\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_dottedname_root_factory\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_explicit_notfound_trumps_iexceptionresponse\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_includes\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_includes_spaces\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_locale_negotiator\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_locale_negotiator_dottedname\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_no_default_root_factory\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_registers_default_exceptionresponse_views\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_registers_default_view_predicates\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_registers_default_webob_iresponse_adapter\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_request_factory\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_request_factory_dottedname\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_response_factory\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_tweens\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_unhook_zca\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_with_package\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_with_package_module\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_with_package_package\nPASSED r2e_tests/test_config/test_init.py::TestConfigurator_add_directive::test_directive_persists_across_configurator_creations\nPASSED r2e_tests/test_config/test_init.py::TestConfigurator_add_directive::test_extend_action_method_successful\nPASSED r2e_tests/test_config/test_init.py::TestConfigurator_add_directive::test_extend_same_name_doesnt_conflict\nPASSED r2e_tests/test_config/test_init.py::TestConfigurator__add_predicate::test_factory_as_object\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_action_simple\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_action_with_includepath\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_action_with_includepath_and_info\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_action_with_info\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_action_with_introspectables\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_action_with_order\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_execute_actions_dicts\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_execute_actions_error\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_execute_actions_tuples\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_execute_actions_with_introspectable_no_callable\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_execute_actions_with_introspectables\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_executing_conflicting_action_across_orders\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_executing_conflicting_action_across_reentrant_orders\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_it\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_processSpec\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_reentrant_action\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_reentrant_action_error\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_reentrant_action_with_deferred_discriminator\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_reentrant_action_without_clear\nPASSED r2e_tests/test_config/test_init.py::Test_reentrant_action_functional::test_deferred_discriminator\nPASSED r2e_tests/test_config/test_init.py::Test_reentrant_action_functional::test_functional\nPASSED r2e_tests/test_config/test_init.py::Test_resolveConflicts::test_conflicts_across_orders\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::Test_resolveConflicts::test_override_success_across_orders\nPASSED r2e_tests/test_config/test_init.py::TestGlobalRegistriesIntegration::test_global_registries\nPASSED r2e_tests/test_config/test_init.py::TestGlobalRegistriesIntegration::test_global_registries_empty\nPASSED r2e_tests/test_config/test_rendering.py::TestRenderingConfiguratorMixin::test_add_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_changing_set_default_csrf_options\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_csrf_options\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__set_settings_does_not_uses_original_dict\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::TestSettingsConfiguratorMixin::test_settings_parameter_dict_is_never_updated\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_csrf_trusted_origins\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_noargs\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_originals_kept\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_prevent_cachebust\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_prevent_http_cache\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_reload_all\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_reload_assets\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_reload_resources\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_reload_templates\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_add_renderer\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_add_renderer_explicitrenderer\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_add_renderer_twice\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_add_subscriber_defaults\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_add_subscriber_dottedname\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_add_subscriber_multiple\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_add_subscriber_single\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_add_template\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_resources\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_securitypolicy\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_securitypolicy_forget_result\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_securitypolicy_remember_result\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tween_dottedname\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tween_instance\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tween_name_ingress\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tween_name_main\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tween_over_ingress\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tween_over_ingress_iterable\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tween_under_main\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tween_under_main_iterable\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tween_unsuitable\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tweens_conflict\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tweens_names_distinct\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tweens_names_with_over_nonstringoriter\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tweens_names_with_under_nonstringoriter\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tweens_names_with_underover\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test___call___explicit\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test___call___implicit\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_add_explicit\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_add_implicit\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_1\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_2\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_3\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_4\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_5\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_conflict_direct\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_conflict_indirect\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_missing_over_and_under_partials\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_missing_over_partial\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_missing_over_partial_with_fallback\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_missing_under_partial\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_missing_under_partial_with_fallback\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_with_missing_fallbacks\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_with_multiple_matching_fallbacks\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_with_partial_fallbacks\nPASSED r2e_tests/test_config/test_util.py::TestActionInfo::test___str__\nPASSED r2e_tests/test_config/test_util.py::TestActionInfo::test_class_conforms\nPASSED r2e_tests/test_config/test_util.py::TestActionInfo::test_ctor\nPASSED r2e_tests/test_config/test_util.py::TestActionInfo::test_instance_conforms\nPASSED r2e_tests/test_config/test_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_close_matches\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::TestDeprecatedPredicates::test_it\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_exception_view\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_exception_view_disallows_exception_only\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_exception_view_disallows_for_\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_exception_view_disallows_name\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_exception_view_disallows_permission\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_exception_view_disallows_require_csrf\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_exception_view_with_subclass\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_exception_view_with_view_defaults\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_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_disallows_require_csrf\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_forbidden_view_no_view_argument\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_forbidden_view_with_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_forbidden_view_with_view_defaults\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_normal_and_exception_view_intr_derived_callable\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_notfound_view\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_notfound_view_allows_other_predicates\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_notfound_view_append_slash\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_notfound_view_append_slash_custom_response\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_notfound_view_disallows_context\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_notfound_view_disallows_for_\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_notfound_view_disallows_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_disallows_require_csrf\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_notfound_view_no_view_argument\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_notfound_view_with_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_notfound_view_with_view_defaults\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_static_view_absolute\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_static_view_here_no_utility_registered\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_static_view_package_relative\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_as_instance\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_as_instance_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_as_instancemethod\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_as_instancemethod_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_as_oldstyle_class\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_as_oldstyle_class_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_class_method_no_attr\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_context_as_class\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_context_as_dottedname\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_context_as_iface\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_context_trumps_for\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_custom_more_preds_first_bests_fewer_preds_last\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_custom_predicate_bests_standard_predicate\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_default_phash_overrides_default_phash\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_default_phash_overrides_no_phash\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_exc_default_phash_overrides_default_phash\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_exc_default_phash_overrides_no_phash\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_exc_multiview_replaces_existing_securedview\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_exc_multiview_replaces_existing_view\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_exc_multiview_replaces_multiviews\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_exc_multiview_replaces_only_exc_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_only\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_exception_only_misconfiguration\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_exception_only_no_regular_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_check_csrf_predicates_match\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_csrf_header\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_csrf_param\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_custom_predicates_match\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_custom_predicates_nomatch\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_decorator\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_decorator_tuple\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_default_permission_no_explicit_permission\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_default_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_function_callable\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_function_callable_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_header_badregex\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_header_noval_match\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_header_noval_nomatch\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_header_val_match\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_header_val_missing\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_header_val_nomatch\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_http_cache\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_mapper\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_missing_csrf_header\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_name\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_name_unicode\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_no_default_permission_no_explicit_permission\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_nonexistant_route_name\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_path_info_badregex\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_path_info_match\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_path_info_nomatch\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_permission\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_method_false\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_method_get_implies_head\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_method_sequence_conflict\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_method_sequence_false\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_method_sequence_true\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_method_true\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_param_noval_false\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_param_noval_true\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_param_val_false\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_param_val_true\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_type\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_type_and_route_name\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_type_as_iface\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_type_as_noniface\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_route_name\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_route_name_exception\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_tmpl_renderer_factory_introspector_missing\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_tmpl_renderer_factory_no_renderer_factory\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_tmpl_renderer_factory_with_renderer_factory\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_view_config_and_view_defaults_conflicts\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_view_config_and_view_defaults_doesnt_conflict\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_view_defaults\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_view_defaults_viewname_is_dottedname_kwarg\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_view_defaults_viewname_is_dottedname_nonkwarg\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_xhr_false\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_xhr_true\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_wrapped_view_is_decorated\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_views_with_accept_multiview_replaces_existing\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_derive_view_dottedname\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_derive_view_function\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_derive_view_with_default_renderer_no_explicit_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_derive_view_with_default_renderer_with_explicit_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_set_view_mapper\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_set_view_mapper_dottedname\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_view_with_most_specific_predicate\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_view_with_most_specific_predicate_with_mismatch\nPASSED r2e_tests/test_config/test_views.py::Test_runtime_exc_view::test_call\nPASSED r2e_tests/test_config/test_views.py::Test_runtime_exc_view::test_call_dispatches_on_exception\nPASSED r2e_tests/test_config/test_views.py::Test_runtime_exc_view::test_permitted\nPASSED r2e_tests/test_config/test_views.py::Test_runtime_exc_view::test_permitted_dispatches_on_exception\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::TestDefaultViewMapper::test__view_as_function_with_attr\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_function_context_and_request\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_function_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_function_requestonly_with_attr\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_instance_context_and_request\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_instance_context_and_request_and_attr\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_instance_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_instance_requestonly_with_attr\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_newstyle_class_context_and_request\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_newstyle_class_context_and_request_with_attr\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_newstyle_class_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_newstyle_class_requestonly_with_attr\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_oldstyle_class_context_and_request\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_oldstyle_class_context_and_request_with_attr\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_oldstyle_class_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_oldstyle_class_requestonly_with_attr\nPASSED r2e_tests/test_config/test_views.py::Test_preserve_view_attrs::test_it_different\nPASSED r2e_tests/test_config/test_views.py::Test_preserve_view_attrs::test_it_different_with_existing_original_view\nPASSED r2e_tests/test_config/test_views.py::Test_preserve_view_attrs::test_it_same\nPASSED r2e_tests/test_config/test_views.py::Test_preserve_view_attrs::test_it_view_is_None\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_already_exists\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_cachebust_prevented\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_cachebuster\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_cachebuster_abspath\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_cachebuster_for_more_specific_path\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_cachebuster_overwrite\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_cachebuster_overwrite_explicit\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_package_root\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_url_noendslash\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_url_noscheme\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_url_withendslash\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_viewname\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_viewname_with_context\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_viewname_with_for_\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_viewname_with_permission\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_viewname_with_renderer\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_viewname_with_route_prefix\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_missing\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_quoting\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_registration_miss\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_route_url\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_slash_in_name1\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_slash_in_name2\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_url_cachebust\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_url_cachebust_abspath\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_url_cachebust_nomatch\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_url_quoted_remote\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_url_unquoted_local\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_url_with_custom_anchor\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_url_with_custom_query\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_verifyClass\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_verifyObject\nPASSED r2e_tests/test_config/test_views.py::Test_view_description::test_with_text\nPASSED r2e_tests/test_config/test_views.py::Test_viewdefaults::test_dunder_attrs_copied\nPASSED r2e_tests/test_scripts/test_common.py::TestParseVars::test_parse_vars_bad\nPASSED r2e_tests/test_scripts/test_common.py::TestParseVars::test_parse_vars_good\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_confirm_override_conflicting_name\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_force_override_conflicting_name\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_force_override_site_name\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_known_scaffold_absolute_path\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_known_scaffold_multiple_rendered\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_known_scaffold_single_rendered\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_known_scaffold_with_path_as_project_target_rendered\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_no_project_name\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_run_no_scaffold_name\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_run_no_scaffold_no_args\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_run_show_scaffolds_exist\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_run_show_scaffolds_none_exist\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_scaffold_with_dev_pyramid_long_version\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_scaffold_with_dev_pyramid_version\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_scaffold_with_hyphen_in_project_name\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_scaffold_with_package_name\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_scaffold_with_prod_pyramid_long_version\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_scaffold_with_prod_pyramid_unparsable_version\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_scaffold_with_prod_pyramid_version\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_unknown_scaffold_name\nPASSED r2e_tests/test_scripts/test_pcreate.py::Test_main::test_it\nPASSED r2e_tests/test_scripts/test_pdistreport.py::TestPDistReportCommand::test_no_dists\nPASSED r2e_tests/test_scripts/test_pdistreport.py::TestPDistReportCommand::test_with_dists\nPASSED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_display_headers\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_has_content_type_header_var\nPASSED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_has_good_header_var\nPASSED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_has_multiple_header_vars\nPASSED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_method_configures_logging\nPASSED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_method_get\nPASSED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_method_options\nPASSED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_method_patch\nPASSED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_method_post\nPASSED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_method_propfind\nPASSED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_method_put\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_path_doesnt_start_with_slash\nPASSED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_response_has_no_charset\nPASSED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_two_args\nPASSED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_w_basic_auth\nPASSED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_with_query_string\nPASSED r2e_tests/test_scripts/test_prequest.py::Test_main::test_it\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test__get_mapper\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_bad_args\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_bad_format\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_class_view\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_config_format_ini_commas\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_config_format_ini_newlines\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_config_format_ini_spaces\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_good_args\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_good_format\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_no_mapper\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_no_routes\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_route_as_wsgiapp\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_route_no_view\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_route_with_no_slash_prefix\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_single_route_multiview_registered\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_single_route_no_route_registered\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_single_route_no_views_registered\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_single_route_one_view_registered_with_factory\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_static_routes_included_in_list\nPASSED r2e_tests/test_scripts/test_proutes.py::Test_main::test_it\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_config_file_finds_open_url\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_guess_server_url\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_reload_call_hupper_with_correct_args\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_run_no_args\nPASSED r2e_tests/test_scripts/test_pserve.py::Test_main::test_it\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_custom_section_override\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_default_shell_option\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_errors_with_unknown_shell\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_loads_check_variable_override_order\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_loads_custom_items\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_loads_default_shell\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_loads_ipython\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_loads_pythonstartup\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_loads_setup_from_options\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_setup\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_setup_generator\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_list_shells\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_shell_entry_points\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_shell_ordering\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_shell_override\nPASSED r2e_tests/test_scripts/test_pshell.py::Test_python_shell_runner::test_it\nPASSED r2e_tests/test_scripts/test_pshell.py::Test_main::test_it\nPASSED r2e_tests/test_scripts/test_ptweens.py::TestPTweensCommand::test__get_tweens\nPASSED r2e_tests/test_scripts/test_ptweens.py::TestPTweensCommand::test_command_implicit_and_explicit_tweens\nPASSED r2e_tests/test_scripts/test_ptweens.py::TestPTweensCommand::test_command_implicit_tweens_only\nPASSED r2e_tests/test_scripts/test_ptweens.py::TestPTweensCommand::test_command_no_tweens\nPASSED r2e_tests/test_scripts/test_ptweens.py::Test_main::test_it\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_multi_routes_all_match\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_multi_routes_none_match\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_multi_routes_some_match\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_view_no_match\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_view_no_match_multiview_registered\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_view_route_multiview\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_view_route_multiview_no_view_registered\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_view_route_no_multiview\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_view_traversal\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_view_traversal_multiview\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_multi_view_nested\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_multiview\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_multiview_with_permission\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_multiview_with_predicates\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_not_found\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_not_found_url_starts_without_slash\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_single_view_route\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_single_view_route_with_route_predicates\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_single_view_traversal\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_single_view_traversal_with_permission\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_single_view_traversal_with_predicates\nPASSED r2e_tests/test_scripts/test_pviews.py::Test_main::test_it\nFAILED r2e_tests/test_1.py::TestPickleSerializer::test_loads - AssertionError...\nFAILED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_resource_url_adapter_dotted_names\nFAILED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_resource_url_adapter_introspectables\nFAILED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_traverser_dotted_names\nFAILED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_directory_with_directory\nFAILED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_directory_with_package\nFAILED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_file_with_file\nFAILED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_package_with_directory\nFAILED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_package_with_package\nFAILED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_filename_no_overrides\nFAILED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_filename_override_returns_None\nFAILED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_get_filename\nFAILED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_get_filename_with_prefix\nFAILED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_add_translation_dirs_abspath\nFAILED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_add_translation_dirs_asset_spec\nFAILED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_add_translation_dirs_asset_spec_existing_translation_dirs\nFAILED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_add_translation_dirs_doesnt_use_override_w_autocommit\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_i18n.py::TestI18NConfiguratorMixin::test_add_translation_dirs_override_multiple_specs_multiple_calls\nFAILED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_add_translation_dirs_uses_override_out_of_order\nFAILED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_add_translation_dirs_uses_override_w_autocommit\nFAILED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_no_registry\nFAILED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_noreg_debug_logger_None_default\nFAILED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_include_constant_root_package\nFAILED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_scan_integration_conflict\nFAILED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_debug_logger_None_default\nFAILED r2e_tests/test_config/test_init.py::TestConfigurator_add_directive::test_add_directive_with_custom_callable\nFAILED r2e_tests/test_config/test_init.py::TestConfigurator_add_directive::test_add_directive_with_partial\nFAILED r2e_tests/test_config/test_init.py::TestConfigurator_add_directive::test_extend_with_dotted_name\nFAILED r2e_tests/test_config/test_init.py::TestConfigurator_add_directive::test_extend_with_python_callable\nFAILED r2e_tests/test_config/test_init.py::TestConfigurator__add_predicate::test_factory_as_dotted_name\nFAILED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_static_view_package_here_relative\nFAILED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_template_renderer\nFAILED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_template_renderer_no_callable\nFAILED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_url_cachebust_with_overrides\nFAILED r2e_tests/test_config/test_views.py::Test_view_description::test_without_text\nFAILED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_one_route_all_methods_view_only_post\nFAILED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_one_route_only_post_view_all_methods\nFAILED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_one_route_only_post_view_post_and_get\nFAILED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_one_route_with_long_name_one_view_registered\nFAILED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_route_is_get_view_request_method_not_post\nFAILED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_route_request_method_mismatch\nFAILED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_route_static_views\nFAILED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_single_route_one_view_registered\nFAILED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_view_glob\nFAILED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_view_request_method_not_post\nFAILED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_config_file_finds_watch_files\nFAILED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_single_view_function_traversal\n======================== 49 failed, 899 passed in 5.12s ========================\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_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047\ncollected 948 items\n\nr2e_tests/test_1.py ...........................................F........ [  5%]\n........................................................................ [ 13%]\n..........FFF                                                            [ 14%]\nr2e_tests/test_config/test_adapters.py .FF..............F...             [ 16%]\nr2e_tests/test_config/test_assets.py ....F.F...F...FF.FF................ [ 20%]\n.....................................F.F................................ [ 27%]\n                                                                         [ 27%]\nr2e_tests/test_config/test_factories.py .......................          [ 30%]\nr2e_tests/test_config/test_i18n.py FFFF..FF.FFF..                        [ 31%]\nr2e_tests/test_config/test_init.py ..................................... [ 35%]\n.......F..F.......F..............F...........F.....................FF... [ 43%]\nFFF..............................                                        [ 46%]\nr2e_tests/test_config/test_rendering.py ...                              [ 47%]\nr2e_tests/test_config/test_routes.py ........................            [ 49%]\nr2e_tests/test_config/test_security.py ............                      [ 50%]\nr2e_tests/test_config/test_settings.py ........................          [ 53%]\nr2e_tests/test_config/test_testing.py ............                       [ 54%]\nr2e_tests/test_config/test_tweens.py .................................   [ 58%]\nr2e_tests/test_config/test_util.py ........................              [ 60%]\nr2e_tests/test_config/test_views.py .................................F.. [ 64%]\n........................................................................ [ 72%]\n.......................FF............................................... [ 79%]\n.......................................................F.......F.        [ 86%]\nr2e_tests/test_scripts/test_common.py ..                                 [ 86%]\nr2e_tests/test_scripts/test_pcreate.py .....................             [ 89%]\nr2e_tests/test_scripts/test_pdistreport.py ..                            [ 89%]\nr2e_tests/test_scripts/test_prequest.py ...................              [ 91%]\nr2e_tests/test_scripts/test_proutes.py ...........FFFF.F.FF....F..FF.    [ 94%]\nr2e_tests/test_scripts/test_pserve.py .F......                           [ 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___________________ TestSignedCookieSession.test_bad_pickle ____________________\n\nself = <r2e_tests.test_1.TestSignedCookieSession testMethod=test_bad_pickle>\n\n    def test_bad_pickle(self):\n        import base64\n        import hashlib\n        import hmac\n    \n        digestmod = lambda: hashlib.new('sha512')\n        # generated from dumping an object that cannot be found anymore, eg:\n        # class Foo: pass\n        # print(pickle.dumps(Foo()))\n        cstruct = b'(i__main__\\nFoo\\np0\\n(dp1\\nb.'\n        sig = hmac.new(b'pyramid.session.secret', cstruct, digestmod).digest()\n        cookieval = base64.urlsafe_b64encode(sig + cstruct).rstrip(b'=')\n    \n        request = testing.DummyRequest()\n        request.cookies['session'] = cookieval\n>       session = self._makeOne(request, secret='secret')\n\nr2e_tests/test_1.py:481: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \nr2e_tests/test_1.py:335: in _makeOne\n    return SignedCookieSessionFactory(**kw)(request)\npyramid/session.py:259: in __init__\n    value = serializer.loads(bytes_(cookieval))\n.venv/lib/python3.8/site-packages/webob/cookies.py:685: in loads\n    return self.serializer.loads(cstruct)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = <pyramid.session.PickleSerializer object at 0x7b4fd35f2730>\nbstruct = b'(i__main__\\nFoo\\np0\\n(dp1\\nb.'\n\n    def loads(self, bstruct):\n        \"\"\"Accept bytes and return a Python object.\"\"\"\n>       return pickle.loads(bstruct)\nE       AttributeError: Can't get attribute 'Foo' on <module 'pytest.__main__' from '/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/.venv/lib/python3.8/site-packages/pytest/__main__.py'>\n\npyramid/session.py:124: AttributeError\n_______________________ TestPickleSerializer.test_loads ________________________\n\nself = <r2e_tests.test_1.TestPickleSerializer testMethod=test_loads>\n\n    def test_loads(self):\n        # generated from dumping Dummy() using protocol=2\n        cstruct = b'\\x80\\x02cpyramid.tests.test_session\\nDummy\\nq\\x00)\\x81q\\x01.'\n        serializer = self._makeOne()\n>       result = serializer.loads(cstruct)\n\nr2e_tests/test_1.py:692: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = <pyramid.session.PickleSerializer object at 0x7b4fd3691700>\nbstruct = b'\\x80\\x02cpyramid.tests.test_session\\nDummy\\nq\\x00)\\x81q\\x01.'\n\n    def loads(self, bstruct):\n        \"\"\"Accept bytes and return a Python object.\"\"\"\n>       return pickle.loads(bstruct)\nE       AttributeError: Can't get attribute 'Dummy' on <module 'pyramid.tests.test_session' from '/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/pyramid/tests/test_session.py'>\n\npyramid/session.py:124: AttributeError\n_______ TestPickleSerializer.test_loads_raises_ValueError_on_bad_import ________\n\nself = <r2e_tests.test_1.TestPickleSerializer testMethod=test_loads_raises_ValueError_on_bad_import>\n\n    def test_loads_raises_ValueError_on_bad_import(self):\n        # generated from dumping an object that cannot be found anymore, eg:\n        # class Foo: pass\n        # print(pickle.dumps(Foo()))\n        cstruct = b'(i__main__\\nFoo\\np0\\n(dp1\\nb.'\n        serializer = self._makeOne()\n>       self.assertRaises(ValueError, serializer.loads, cstruct)\n\nr2e_tests/test_1.py:706: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\n    def loads(self, bstruct):\n        \"\"\"Accept bytes and return a Python object.\"\"\"\n>       return pickle.loads(bstruct)\nE       AttributeError: Can't get attribute 'Foo' on <module 'pytest.__main__' from '/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/.venv/lib/python3.8/site-packages/pytest/__main__.py'>\n\npyramid/session.py:124: AttributeError\n______ TestPickleSerializer.test_loads_raises_ValueError_on_invalid_data _______\n\nself = <r2e_tests.test_1.TestPickleSerializer testMethod=test_loads_raises_ValueError_on_invalid_data>\n\n    def test_loads_raises_ValueError_on_invalid_data(self):\n        cstruct = b'not pickled'\n        serializer = self._makeOne()\n>       self.assertRaises(ValueError, serializer.loads, cstruct)\n\nr2e_tests/test_1.py:698: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\n    def loads(self, bstruct):\n        \"\"\"Accept bytes and return a Python object.\"\"\"\n>       return pickle.loads(bstruct)\nE       _pickle.UnpicklingError: invalid load key, 'n'.\n\npyramid/session.py:124: UnpicklingError\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 0x7b4fd355f220>, <r2e_tests.test_config.test_adapters.DummyIface object at 0x7b4fd355f220>)\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 0x7b4fd355f220>, <r2e_tests.test_config.test_adapters.DummyIface object at 0x7b4fd355f220>), <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 0x7b4fd35f2550>\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 0x7b4fd35f2550>, <InterfaceClass pyramid.interfaces.ITraverser>, '')\n\n.venv/lib/python3.8/site-packages/zope/interface/registry.py:368: ComponentLookupError\n___ TestAssetsConfiguratorMixin.test_override_asset_directory_with_directory ___\n\nself = <r2e_tests.test_config.test_assets.TestAssetsConfiguratorMixin testMethod=test_override_asset_directory_with_directory>\n\n    def test_override_asset_directory_with_directory(self):\n        from pyramid.config.assets import PackageAssetSource\n        config = self._makeOne(autocommit=True)\n        override = DummyUnderOverride()\n        config.override_asset(\n            'pyramid.tests.test_config.pkgs.asset:templates/',\n            'pyramid.tests.test_config.pkgs.asset.subpackage:templates/',\n            _override=override)\n        from pyramid.tests.test_config.pkgs import asset\n        from pyramid.tests.test_config.pkgs.asset import subpackage\n        self.assertEqual(override.package, asset)\n        self.assertEqual(override.path, 'templates/')\n        source = override.source\n        self.assertTrue(isinstance(source, PackageAssetSource))\n        self.assertEqual(source.package, subpackage)\n        self.assertEqual(source.prefix, 'templates/')\n    \n        resource_name = 'bar.pt'\n        expected = os.path.join(here, 'pkgs', 'asset',\n                                'subpackage', 'templates', 'bar.pt')\n>       self.assertEqual(override.source.get_filename(resource_name),\n                         expected)\nE       AssertionError: '/hom[90 chars]c047/pyramid/tests/test_config/pkgs/asset/subp[19 chars]r.pt' != '/hom[90 chars]c047/r2e_tests/test_config/pkgs/asset/subpacka[15 chars]r.pt'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/pyramid/tests/test_config/pkgs/asset/subpackage/templates/bar.pt\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/r2e_tests/test_config/pkgs/asset/subpackage/templates/bar.pt\nE       ?                                                                                                     ^^^\n\nr2e_tests/test_config/test_assets.py:106: AssertionError\n____ TestAssetsConfiguratorMixin.test_override_asset_directory_with_package ____\n\nself = <r2e_tests.test_config.test_assets.TestAssetsConfiguratorMixin testMethod=test_override_asset_directory_with_package>\n\n    def test_override_asset_directory_with_package(self):\n        from pyramid.config.assets import PackageAssetSource\n        config = self._makeOne(autocommit=True)\n        override = DummyUnderOverride()\n        config.override_asset(\n            'pyramid.tests.test_config.pkgs.asset:templates/',\n            'pyramid.tests.test_config.pkgs.asset.subpackage',\n            _override=override)\n        from pyramid.tests.test_config.pkgs import asset\n        from pyramid.tests.test_config.pkgs.asset import subpackage\n        self.assertEqual(override.package, asset)\n        self.assertEqual(override.path, 'templates/')\n        source = override.source\n        self.assertTrue(isinstance(source, PackageAssetSource))\n        self.assertEqual(source.package, subpackage)\n        self.assertEqual(source.prefix, '')\n    \n        resource_name = 'templates/bar.pt'\n        expected = os.path.join(here, 'pkgs', 'asset',\n                                'subpackage', 'templates', 'bar.pt')\n>       self.assertEqual(override.source.get_filename(resource_name),\n                         expected)\nE       AssertionError: '/hom[90 chars]c047/pyramid/tests/test_config/pkgs/asset/subp[19 chars]r.pt' != '/hom[90 chars]c047/r2e_tests/test_config/pkgs/asset/subpacka[15 chars]r.pt'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/pyramid/tests/test_config/pkgs/asset/subpackage/templates/bar.pt\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/r2e_tests/test_config/pkgs/asset/subpackage/templates/bar.pt\nE       ?                                                                                                     ^^^\n\nr2e_tests/test_config/test_assets.py:129: AssertionError\n________ TestAssetsConfiguratorMixin.test_override_asset_file_with_file ________\n\nself = <r2e_tests.test_config.test_assets.TestAssetsConfiguratorMixin testMethod=test_override_asset_file_with_file>\n\n    def test_override_asset_file_with_file(self):\n        from pyramid.config.assets import PackageAssetSource\n        config = self._makeOne(autocommit=True)\n        override = DummyUnderOverride()\n        config.override_asset(\n            'pyramid.tests.test_config.pkgs.asset:templates/foo.pt',\n            'pyramid.tests.test_config.pkgs.asset.subpackage:templates/bar.pt',\n            _override=override)\n        from pyramid.tests.test_config.pkgs import asset\n        from pyramid.tests.test_config.pkgs.asset import subpackage\n        self.assertEqual(override.package, asset)\n        self.assertEqual(override.path, 'templates/foo.pt')\n        source = override.source\n        self.assertTrue(isinstance(source, PackageAssetSource))\n        self.assertEqual(source.package, subpackage)\n        self.assertEqual(source.prefix, 'templates/bar.pt')\n    \n        resource_name = ''\n        expected = os.path.join(here, 'pkgs', 'asset',\n                                'subpackage', 'templates', 'bar.pt')\n>       self.assertEqual(override.source.get_filename(resource_name),\n                         expected)\nE       AssertionError: '/hom[90 chars]c047/pyramid/tests/test_config/pkgs/asset/subp[19 chars]r.pt' != '/hom[90 chars]c047/r2e_tests/test_config/pkgs/asset/subpacka[15 chars]r.pt'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/pyramid/tests/test_config/pkgs/asset/subpackage/templates/bar.pt\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/r2e_tests/test_config/pkgs/asset/subpackage/templates/bar.pt\nE       ?                                                                                                     ^^^\n\nr2e_tests/test_config/test_assets.py:60: AssertionError\n____ TestAssetsConfiguratorMixin.test_override_asset_package_with_directory ____\n\nself = <r2e_tests.test_config.test_assets.TestAssetsConfiguratorMixin testMethod=test_override_asset_package_with_directory>\n\n    def test_override_asset_package_with_directory(self):\n        from pyramid.config.assets import PackageAssetSource\n        config = self._makeOne(autocommit=True)\n        override = DummyUnderOverride()\n        config.override_asset(\n            'pyramid.tests.test_config.pkgs.asset',\n            'pyramid.tests.test_config.pkgs.asset.subpackage:templates/',\n            _override=override)\n        from pyramid.tests.test_config.pkgs import asset\n        from pyramid.tests.test_config.pkgs.asset import subpackage\n        self.assertEqual(override.package, asset)\n        self.assertEqual(override.path, '')\n        source = override.source\n        self.assertTrue(isinstance(source, PackageAssetSource))\n        self.assertEqual(source.package, subpackage)\n        self.assertEqual(source.prefix, 'templates/')\n    \n        resource_name = 'bar.pt'\n        expected = os.path.join(here, 'pkgs', 'asset',\n                                'subpackage', 'templates', 'bar.pt')\n>       self.assertEqual(override.source.get_filename(resource_name),\n                         expected)\nE       AssertionError: '/hom[90 chars]c047/pyramid/tests/test_config/pkgs/asset/subp[19 chars]r.pt' != '/hom[90 chars]c047/r2e_tests/test_config/pkgs/asset/subpacka[15 chars]r.pt'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/pyramid/tests/test_config/pkgs/asset/subpackage/templates/bar.pt\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/r2e_tests/test_config/pkgs/asset/subpackage/templates/bar.pt\nE       ?                                                                                                     ^^^\n\nr2e_tests/test_config/test_assets.py:152: AssertionError\n_____ TestAssetsConfiguratorMixin.test_override_asset_package_with_package _____\n\nself = <r2e_tests.test_config.test_assets.TestAssetsConfiguratorMixin testMethod=test_override_asset_package_with_package>\n\n    def test_override_asset_package_with_package(self):\n        from pyramid.config.assets import PackageAssetSource\n        config = self._makeOne(autocommit=True)\n        override = DummyUnderOverride()\n        config.override_asset(\n            'pyramid.tests.test_config.pkgs.asset',\n            'pyramid.tests.test_config.pkgs.asset.subpackage',\n            _override=override)\n        from pyramid.tests.test_config.pkgs import asset\n        from pyramid.tests.test_config.pkgs.asset import subpackage\n        self.assertEqual(override.package, asset)\n        self.assertEqual(override.path, '')\n        source = override.source\n        self.assertTrue(isinstance(source, PackageAssetSource))\n        self.assertEqual(source.package, subpackage)\n        self.assertEqual(source.prefix, '')\n    \n        resource_name = 'templates/bar.pt'\n        expected = os.path.join(here, 'pkgs', 'asset',\n                                'subpackage', 'templates', 'bar.pt')\n>       self.assertEqual(override.source.get_filename(resource_name),\n                         expected)\nE       AssertionError: '/hom[90 chars]c047/pyramid/tests/test_config/pkgs/asset/subp[19 chars]r.pt' != '/hom[90 chars]c047/r2e_tests/test_config/pkgs/asset/subpacka[15 chars]r.pt'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/pyramid/tests/test_config/pkgs/asset/subpackage/templates/bar.pt\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/r2e_tests/test_config/pkgs/asset/subpackage/templates/bar.pt\nE       ?                                                                                                     ^^^\n\nr2e_tests/test_config/test_assets.py:83: AssertionError\n_________ TestOverrideProvider.test_get_resource_filename_no_overrides _________\n\nself = <r2e_tests.test_config.test_assets.TestOverrideProvider testMethod=test_get_resource_filename_no_overrides>\n\n    def test_get_resource_filename_no_overrides(self):\n        resource_name = 'test_assets.py'\n        import pyramid.tests.test_config\n        provider = self._makeOne(pyramid.tests.test_config)\n        expected = os.path.join(here, resource_name)\n        result = provider.get_resource_filename(None, resource_name)\n>       self.assertEqual(result, expected)\nE       AssertionError: '/hom[73 chars]538e2763ab6b78f1bc047/pyramid/tests/test_config/test_assets.py' != '/hom[73 chars]538e2763ab6b78f1bc047/r2e_tests/test_config/test_assets.py'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/pyramid/tests/test_config/test_assets.py\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/r2e_tests/test_config/test_assets.py\nE       ?                                                                                                     ^^^\n\nr2e_tests/test_config/test_assets.py:297: AssertionError\n____ TestOverrideProvider.test_get_resource_filename_override_returns_None _____\n\nself = <r2e_tests.test_config.test_assets.TestOverrideProvider testMethod=test_get_resource_filename_override_returns_None>\n\n    def test_get_resource_filename_override_returns_None(self):\n        overrides = DummyOverrides(None)\n        self._registerOverrides(overrides)\n        resource_name = 'test_assets.py'\n        import pyramid.tests.test_config\n        provider = self._makeOne(pyramid.tests.test_config)\n        expected = os.path.join(here, resource_name)\n        result = provider.get_resource_filename(None, resource_name)\n>       self.assertEqual(result, expected)\nE       AssertionError: '/hom[73 chars]538e2763ab6b78f1bc047/pyramid/tests/test_config/test_assets.py' != '/hom[73 chars]538e2763ab6b78f1bc047/r2e_tests/test_config/test_assets.py'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/pyramid/tests/test_config/test_assets.py\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/r2e_tests/test_config/test_assets.py\nE       ?                                                                                                     ^^^\n\nr2e_tests/test_config/test_assets.py:345: AssertionError\n___________________ TestPackageAssetSource.test_get_filename ___________________\n\nself = <r2e_tests.test_config.test_assets.TestPackageAssetSource testMethod=test_get_filename>\n\n    def test_get_filename(self):\n        source = self._makeOne('')\n>       self.assertEqual(source.get_filename('test_assets.py'),\n                         os.path.join(here, 'test_assets.py'))\nE       AssertionError: '/hom[73 chars]538e2763ab6b78f1bc047/pyramid/tests/test_config/test_assets.py' != '/hom[73 chars]538e2763ab6b78f1bc047/r2e_tests/test_config/test_assets.py'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/pyramid/tests/test_config/test_assets.py\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/r2e_tests/test_config/test_assets.py\nE       ?                                                                                                     ^^^\n\nr2e_tests/test_config/test_assets.py:716: AssertionError\n_____________ TestPackageAssetSource.test_get_filename_with_prefix _____________\n\nself = <r2e_tests.test_config.test_assets.TestPackageAssetSource testMethod=test_get_filename_with_prefix>\n\n    def test_get_filename_with_prefix(self):\n        source = self._makeOne('test_assets.py')\n>       self.assertEqual(source.get_filename(''),\n                         os.path.join(here, 'test_assets.py'))\nE       AssertionError: '/hom[73 chars]538e2763ab6b78f1bc047/pyramid/tests/test_config/test_assets.py' != '/hom[73 chars]538e2763ab6b78f1bc047/r2e_tests/test_config/test_assets.py'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/pyramid/tests/test_config/test_assets.py\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/r2e_tests/test_config/test_assets.py\nE       ?                                                                                                     ^^^\n\nr2e_tests/test_config/test_assets.py:721: AssertionError\n_________ TestI18NConfiguratorMixin.test_add_translation_dirs_abspath __________\n\nself = <r2e_tests.test_config.test_i18n.TestI18NConfiguratorMixin testMethod=test_add_translation_dirs_abspath>\n\n    def test_add_translation_dirs_abspath(self):\n        from pyramid.interfaces import ITranslationDirectories\n        config = self._makeOne(autocommit=True)\n>       config.add_translation_dirs(locale)\n\nr2e_tests/test_config/test_i18n.py:102: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \npyramid/config/util.py:64: in wrapper\n    result = wrapped(self, *arg, **kw)\npyramid/config/i18n.py:119: in add_translation_dirs\n    self.action(None, register, introspectables=introspectables)\npyramid/config/__init__.py:629: in action\n    callable(*args, **kw)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\n    def register():\n        directories = []\n        resolver = AssetResolver(self.package_name)\n    \n        # defer spec resolution until register to allow for asset\n        # overrides to take place in an earlier config phase\n        for spec in specs:\n            # the trailing slash helps match asset overrides for folders\n            if not spec.endswith('/'):\n                spec += '/'\n            asset = resolver.resolve(spec)\n            directory = asset.abspath()\n            if not asset.isdir():\n>               raise ConfigurationError('\"%s\" is not a directory' %\n                                        directory)\nE               pyramid.exceptions.ConfigurationError: \"/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/r2e_tests/pkgs/localeapp/locale\" is not a directory\n\npyramid/config/i18n.py:100: 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]bd1a538e2763ab6b78f1bc047/pyramid/tests/pkgs/localeapp/locale'] != ['/ho[70 chars]bd1a538e2763ab6b78f1bc047/r2e_tests/pkgs/localeapp/locale']\nE       \nE       First differing element 0:\nE       '/hom[68 chars]7bd1a538e2763ab6b78f1bc047/pyramid/tests/pkgs/localeapp/locale'\nE       '/hom[68 chars]7bd1a538e2763ab6b78f1bc047/r2e_tests/pkgs/localeapp/locale'\nE       \nE       - ['/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/pyramid/tests/pkgs/localeapp/locale']\nE       ?                                                                                                      -- ^^^^^\nE       \nE       + ['/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/r2e_tests/pkgs/localeapp/locale']\nE       ?                                                                                                       ^^^\n\nr2e_tests/test_config/test_i18n.py:53: 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]e2763ab6b78f1bc047/pyramid/tests/pkgs/localeapp/locale', 'abc'] != ['/ho[77 chars]e2763ab6b78f1bc047/r2e_tests/pkgs/localeapp/locale', 'abc']\nE       \nE       First differing element 0:\nE       '/hom[68 chars]7bd1a538e2763ab6b78f1bc047/pyramid/tests/pkgs/localeapp/locale'\nE       '/hom[68 chars]7bd1a538e2763ab6b78f1bc047/r2e_tests/pkgs/localeapp/locale'\nE       \nE       - ['/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/pyramid/tests/pkgs/localeapp/locale',\nE       ?                                                                                                      -- ^^^^^\nE       \nE       + ['/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/r2e_tests/pkgs/localeapp/locale',\nE       ?                                                                                                       ^^^\nE       \nE          'abc']\n\nr2e_tests/test_config/test_i18n.py:63: AssertionError\n_ TestI18NConfiguratorMixin.test_add_translation_dirs_doesnt_use_override_w_autocommit _\n\nself = <r2e_tests.test_config.test_i18n.TestI18NConfiguratorMixin testMethod=test_add_translation_dirs_doesnt_use_override_w_autocommit>\n\n    def test_add_translation_dirs_doesnt_use_override_w_autocommit(self):\n        from pyramid.interfaces import ITranslationDirectories\n        config = self._makeOne(autocommit=True)\n        config.add_translation_dirs('pyramid.tests.pkgs.localeapp:locale')\n        config.override_asset('pyramid.tests.pkgs.localeapp:locale/',\n                              'pyramid.tests.pkgs.localeapp:locale2/')\n>       self.assertEqual(config.registry.getUtility(ITranslationDirectories),\n                         [locale])\nE       AssertionError: Lists differ: ['/ho[70 chars]bd1a538e2763ab6b78f1bc047/pyramid/tests/pkgs/localeapp/locale'] != ['/ho[70 chars]bd1a538e2763ab6b78f1bc047/r2e_tests/pkgs/localeapp/locale']\nE       \nE       First differing element 0:\nE       '/hom[68 chars]7bd1a538e2763ab6b78f1bc047/pyramid/tests/pkgs/localeapp/locale'\nE       '/hom[68 chars]7bd1a538e2763ab6b78f1bc047/r2e_tests/pkgs/localeapp/locale'\nE       \nE       - ['/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/pyramid/tests/pkgs/localeapp/locale']\nE       ?                                                                                                      -- ^^^^^\nE       \nE       + ['/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/r2e_tests/pkgs/localeapp/locale']\nE       ?                                                                                                       ^^^\n\nr2e_tests/test_config/test_i18n.py:122: 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]c047/pyramid/tests/pkgs/localeapp/locale', '/h[130 chars]le2'] != ['/ho[91 chars]c047/r2e_tests/pkgs/localeapp/locale', '/home/[122 chars]le2']\nE       \nE       First differing element 0:\nE       '/hom[68 chars]7bd1a538e2763ab6b78f1bc047/pyramid/tests/pkgs/localeapp/locale'\nE       '/hom[68 chars]7bd1a538e2763ab6b78f1bc047/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:70: 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]c047/pyramid/tests/pkgs/localeapp/locale3', '/[269 chars]le2'] != ['/ho[91 chars]c047/r2e_tests/pkgs/localeapp/locale3', '/home[257 chars]le2']\nE       \nE       First differing element 0:\nE       '/hom[69 chars]bd1a538e2763ab6b78f1bc047/pyramid/tests/pkgs/localeapp/locale3'\nE       '/hom[69 chars]bd1a538e2763ab6b78f1bc047/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:79: AssertionError\n_ TestI18NConfiguratorMixin.test_add_translation_dirs_override_multiple_specs_multiple_calls _\n\nself = <r2e_tests.test_config.test_i18n.TestI18NConfiguratorMixin testMethod=test_add_translation_dirs_override_multiple_specs_multiple_calls>\n\n    def test_add_translation_dirs_override_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                                    override=True)\n>       self.assertEqual(config.registry.getUtility(ITranslationDirectories),\n                         [locale, locale2, locale3])\nE       AssertionError: Lists differ: ['/ho[91 chars]c047/pyramid/tests/pkgs/localeapp/locale', '/h[269 chars]le3'] != ['/ho[91 chars]c047/r2e_tests/pkgs/localeapp/locale', '/home/[257 chars]le3']\nE       \nE       First differing element 0:\nE       '/hom[68 chars]7bd1a538e2763ab6b78f1bc047/pyramid/tests/pkgs/localeapp/locale'\nE       '/hom[68 chars]7bd1a538e2763ab6b78f1bc047/r2e_tests/pkgs/localeapp/locale'\nE       \nE       Diff is 1504 characters long. Set self.maxDiff to None to see it.\n\nr2e_tests/test_config/test_i18n.py:89: AssertionError\n_ TestI18NConfiguratorMixin.test_add_translation_dirs_uses_override_out_of_order _\n\nself = <r2e_tests.test_config.test_i18n.TestI18NConfiguratorMixin testMethod=test_add_translation_dirs_uses_override_out_of_order>\n\n    def test_add_translation_dirs_uses_override_out_of_order(self):\n        from pyramid.interfaces import ITranslationDirectories\n        config = self._makeOne()\n        config.add_translation_dirs('pyramid.tests.pkgs.localeapp:locale')\n        config.override_asset('pyramid.tests.pkgs.localeapp:locale/',\n                              'pyramid.tests.pkgs.localeapp:locale2/')\n        config.commit()\n>       self.assertEqual(config.registry.getUtility(ITranslationDirectories),\n                         [locale2])\nE       AssertionError: Lists differ: ['/ho[71 chars]d1a538e2763ab6b78f1bc047/pyramid/tests/pkgs/localeapp/locale2'] != ['/ho[71 chars]d1a538e2763ab6b78f1bc047/r2e_tests/pkgs/localeapp/locale2']\nE       \nE       First differing element 0:\nE       '/hom[69 chars]bd1a538e2763ab6b78f1bc047/pyramid/tests/pkgs/localeapp/locale2'\nE       '/hom[69 chars]bd1a538e2763ab6b78f1bc047/r2e_tests/pkgs/localeapp/locale2'\nE       \nE       - ['/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/pyramid/tests/pkgs/localeapp/locale2']\nE       ?                                                                                                      -- ^^^^^\nE       \nE       + ['/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/r2e_tests/pkgs/localeapp/locale2']\nE       ?                                                                                                       ^^^\n\nr2e_tests/test_config/test_i18n.py:113: AssertionError\n_ TestI18NConfiguratorMixin.test_add_translation_dirs_uses_override_w_autocommit _\n\nself = <r2e_tests.test_config.test_i18n.TestI18NConfiguratorMixin testMethod=test_add_translation_dirs_uses_override_w_autocommit>\n\n    def test_add_translation_dirs_uses_override_w_autocommit(self):\n        from pyramid.interfaces import ITranslationDirectories\n        config = self._makeOne(autocommit=True)\n        config.override_asset('pyramid.tests.pkgs.localeapp:locale/',\n                              'pyramid.tests.pkgs.localeapp:locale2/')\n        config.add_translation_dirs('pyramid.tests.pkgs.localeapp:locale')\n>       self.assertEqual(config.registry.getUtility(ITranslationDirectories),\n                         [locale2])\nE       AssertionError: Lists differ: ['/ho[71 chars]d1a538e2763ab6b78f1bc047/pyramid/tests/pkgs/localeapp/locale2'] != ['/ho[71 chars]d1a538e2763ab6b78f1bc047/r2e_tests/pkgs/localeapp/locale2']\nE       \nE       First differing element 0:\nE       '/hom[69 chars]bd1a538e2763ab6b78f1bc047/pyramid/tests/pkgs/localeapp/locale2'\nE       '/hom[69 chars]bd1a538e2763ab6b78f1bc047/r2e_tests/pkgs/localeapp/locale2'\nE       \nE       - ['/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/pyramid/tests/pkgs/localeapp/locale2']\nE       ?                                                                                                      -- ^^^^^\nE       \nE       + ['/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/r2e_tests/pkgs/localeapp/locale2']\nE       ?                                                                                                       ^^^\n\nr2e_tests/test_config/test_i18n.py:131: AssertionError\n___________________ ConfiguratorTests.test_ctor_no_registry ____________________\n\nself = <r2e_tests.test_config.test_init.ConfiguratorTests testMethod=test_ctor_no_registry>\n\n    def test_ctor_no_registry(self):\n        import sys\n        from pyramid.interfaces import ISettings\n        from pyramid.config import Configurator\n        from pyramid.interfaces import IRendererFactory\n        config = Configurator()\n        this_pkg = sys.modules['pyramid.tests.test_config']\n        self.assertTrue(config.registry.getUtility(ISettings))\n>       self.assertEqual(config.package, this_pkg)\nE       AssertionError: <module 'r2e_tests.test_config' from '/home/gcpuse[117 chars].py'> != <module 'pyramid.tests.test_config' from '/home/gc[125 chars].py'>\n\nr2e_tests/test_config/test_init.py:68: AssertionError\n_________ ConfiguratorTests.test_ctor_noreg_debug_logger_None_default __________\n\nself = <r2e_tests.test_config.test_init.ConfiguratorTests testMethod=test_ctor_noreg_debug_logger_None_default>\n\n    def test_ctor_noreg_debug_logger_None_default(self):\n        from pyramid.interfaces import IDebugLogger\n        config = self._makeOne()\n        logger = config.registry.getUtility(IDebugLogger)\n>       self.assertEqual(logger.name, 'pyramid.tests.test_config')\nE       AssertionError: 'r2e_tests.test_config' != 'pyramid.tests.test_config'\nE       - r2e_tests.test_config\nE       ?  ^^^\nE       + pyramid.tests.test_config\nE       ? ++ ^^^^^\n\nr2e_tests/test_config/test_init.py:181: AssertionError\n_____________ ConfiguratorTests.test_include_constant_root_package _____________\n\nself = <r2e_tests.test_config.test_init.ConfiguratorTests testMethod=test_include_constant_root_package>\n\n    def test_include_constant_root_package(self):\n        from pyramid import tests\n        from pyramid.tests import test_config\n        config = self._makeOne(root_package=tests)\n        results = {}\n        def include(config):\n            results['package'] = config.package\n            results['root_package'] = config.root_package\n        config.include(include)\n        self.assertEqual(results['root_package'], tests)\n>       self.assertEqual(results['package'], test_config)\nE       AssertionError: <module 'r2e_tests.test_config' from '/home/gcpuse[117 chars].py'> != <module 'pyramid.tests.test_config' from '/home/gc[125 chars].py'>\n\nr2e_tests/test_config/test_init.py:834: 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:1106: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \npyramid/config/__init__.py:686: in commit\n    self.action_state.execute_actions(introspector=self.introspector)\npyramid/config/__init__.py:1186: in execute_actions\n    action = next(action_iter, None)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nactions = [{'args': (), 'callable': <function ViewsConfiguratorMixin.add_view.<locals>.register at 0x7b4fd3520700>, 'discriminat...4fd34e7310>, 'discriminator': ('view', None, 'two', None, 'd41d8cd98f00b204e9800998ecf8427e'), 'includepath': (), ...}]\nstate = <pyramid.config.ConflictResolverState object at 0x7b4fd31c5940>\n\n    def resolveConflicts(actions, state=None):\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    \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        Actions are resolved on a per-order basis because some discriminators\n        cannot be computed until earlier actions have executed. An action in an\n        earlier order may execute successfully only to find out later that it was\n        overridden by another action with a smaller include path. This will result\n        in a conflict as there is no way to revert the original action.\n    \n        ``state`` may be an instance of ``ConflictResolverState`` that\n        can be used to resume execution and resolve the new actions against the\n        list of executed actions from a previous call.\n    \n        \"\"\"\n        if state is None:\n            state = ConflictResolverState()\n    \n        # pick up where we left off last time, but track the new actions as well\n        state.remaining_actions.extend(normalize_actions(actions))\n        actions = state.remaining_actions\n    \n        def orderandpos(v):\n            n, v = v\n            return (v['order'] or 0, n)\n    \n        def orderonly(v):\n            n, v = v\n            return v['order'] or 0\n    \n        sactions = sorted(enumerate(actions, start=state.start), key=orderandpos)\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            output = []\n            unique = {}\n    \n            # error out if we went backward in order\n            if state.min_order is not None and order < state.min_order:\n                r = ['Actions were added to order={0} after execution had moved '\n                     'on to order={1}. Conflicting actions: '\n                     .format(order, state.min_order)]\n                for i, action in actiongroup:\n                    for line in str(action['info']).rstrip().split('\\n'):\n                        r.append(\"  \" + line)\n                raise ConfigurationError('\\n'.join(r))\n    \n            for i, action in actiongroup:\n                # Within an order, actions are executed sequentially based on\n                # original action ordering (\"i\").\n    \n                # \"ainfo\" is a tuple of (i, action) where \"i\" is an integer\n                # expressing the relative position of this action in the action\n                # list being resolved, and \"action\" is an action dictionary.  The\n                # purpose of an ainfo is to associate an \"i\" with a particular\n                # action; \"i\" exists for sorting after conflict resolution.\n                ainfo = (i, action)\n    \n                # wait to defer discriminators until we are on their order because\n                # the discriminator may depend on state from a previous order\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            for discriminator, ainfos in unique.items():\n                # We use (includepath, 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 \"i\".\n                def bypath(ainfo):\n                    path, i = ainfo[1]['includepath'], ainfo[0]\n                    return path, order, i\n    \n                ainfos.sort(key=bypath)\n                ainfo, rest = ainfos[0], ainfos[1:]\n                _, action = ainfo\n    \n                # ensure this new action does not conflict with a previously\n                # resolved action from an earlier order / invocation\n                prev_ainfo = state.resolved_ainfos.get(discriminator)\n                if prev_ainfo is not None:\n                    _, paction = prev_ainfo\n                    basepath, baseinfo = paction['includepath'], paction['info']\n                    includepath = action['includepath']\n                    # if the new action conflicts with the resolved action then\n                    # note the conflict, otherwise drop the action as it's\n                    # effectively overriden by the previous action\n                    if (includepath[:len(basepath)] != basepath or\n                            includepath == basepath):\n                        L = conflicts.setdefault(discriminator, [baseinfo])\n                        L.append(action['info'])\n    \n                else:\n                    output.append(ainfo)\n    \n                basepath, baseinfo = action['includepath'], action['info']\n                for _, action in rest:\n                    includepath = action['includepath']\n                    # Test whether path is a prefix of opath\n                    if (includepath[:len(basepath)] != basepath or  # not a prefix\n                            includepath == basepath):\n                        L = conflicts.setdefault(discriminator, [baseinfo])\n                        L.append(action['info'])\n    \n            if conflicts:\n>               raise ConfigurationConflictError(conflicts)\nE               pyramid.exceptions.ConfigurationConflictError: Conflicting configuration actions\nE                 For: ('view', None, '', None, 'd41d8cd98f00b204e9800998ecf8427e')\nE                   Line 4 of file /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/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_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/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_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/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_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/pyramid/tests/test_config/pkgs/selfscan/another.py:\nE                       def two(request):\n\npyramid/config/__init__.py:1368: 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:1115: 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:501: 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:1314: 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:1301: 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:1288: 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:1327: 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:1391: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \npyramid/config/__init__.py:559: in _add_predicate\n    self.action(discriminator, register, introspectables=(intr,),\nr2e_tests/test_config/test_init.py:1388: 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]b4fd335c790>, 'static', 'r2e_tests.test_config:files', {})] != [(<py[39 chars]b4fd335c790>, 'static', 'pyramid.tests.test_config:files', {})]\nE       \nE       First differing element 0:\nE       (<pyr[37 chars]7b4fd335c790>, 'static', 'r2e_tests.test_config:files', {})\nE       (<pyr[37 chars]7b4fd335c790>, 'static', 'pyramid.tests.test_config:files', {})\nE       \nE         [(<pyramid.config.Configurator object at 0x7b4fd335c790>,\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:2066: 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:1187: 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:1228: AssertionError\n_________ TestStaticURLInfo.test_generate_url_cachebust_with_overrides _________\n\nself = <r2e_tests.test_config.test_views.TestStaticURLInfo testMethod=test_generate_url_cachebust_with_overrides>\n\n    def test_generate_url_cachebust_with_overrides(self):\n        config = testing.setUp()\n        try:\n            request = testing.DummyRequest()\n            config.add_static_view('static', 'path')\n            config.override_asset(\n                'pyramid.tests.test_config:path/',\n                'pyramid.tests.test_config:other_path/')\n            def cb(val):\n                def cb_(request, subpath, kw):\n                    kw['_query'] = {'x': val}\n                    return subpath, kw\n                return cb_\n            config.add_cache_buster('path', cb('foo'))\n            result = request.static_url('path/foo.png')\n            self.assertEqual(result, 'http://example.com/static/foo.png?x=foo')\n            config.add_cache_buster('other_path', cb('bar'), explicit=True)\n            result = request.static_url('path/foo.png')\n>           self.assertEqual(result, 'http://example.com/static/foo.png?x=bar')\nE           AssertionError: 'http://example.com/static/foo.png?x=foo' != 'http://example.com/static/foo.png?x=bar'\nE           - http://example.com/static/foo.png?x=foo\nE           ?                                     ^^^\nE           + http://example.com/static/foo.png?x=bar\nE           ?                                     ^^^\n\nr2e_tests/test_config/test_views.py:3214: 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:3385: AssertionError\n_________ TestPRoutesCommand.test_one_route_all_methods_view_only_post _________\n\nself = <r2e_tests.test_scripts.test_proutes.TestPRoutesCommand testMethod=test_one_route_all_methods_view_only_post>\n\n    def test_one_route_all_methods_view_only_post(self):\n        from pyramid.renderers import null_renderer as nr\n    \n        def view1(context, request): return 'view1'\n    \n        config = self._makeConfig(autocommit=True)\n        config.add_route('foo', '/a/b')\n        config.add_view(\n            route_name='foo',\n            view=view1,\n            renderer=nr,\n            request_method='POST'\n        )\n    \n        command = self._makeOne()\n        L = []\n        command.out = L.append\n        command.bootstrap = dummy.DummyBootstrap(registry=config.registry)\n        result = command.run()\n        self.assertEqual(result, 0)\n        self.assertEqual(len(L), 3)\n        compare_to = L[-1].split()\n        expected = [\n            'foo', '/a/b',\n            'pyramid.tests.test_scripts.test_proutes.view1', 'POST'\n        ]\n>       self.assertEqual(compare_to, expected)\nE       AssertionError: Lists differ: ['foo', '/a/b', 'r2e_tests.test_scripts.test_proutes.view1', 'POST'] != ['foo', '/a/b', 'pyramid.tests.test_scripts.test_proutes.view1', 'POST']\nE       \nE       First differing element 2:\nE       'r2e_tests.test_scripts.test_proutes.view1'\nE       'pyramid.tests.test_scripts.test_proutes.view1'\nE       \nE       - ['foo', '/a/b', 'r2e_tests.test_scripts.test_proutes.view1', 'POST']\nE       ?                   ^^^\nE       \nE       + ['foo', '/a/b', 'pyramid.tests.test_scripts.test_proutes.view1', 'POST']\nE       ?                  ++ ^^^^^\n\nr2e_tests/test_scripts/test_proutes.py:342: AssertionError\n_________ TestPRoutesCommand.test_one_route_only_post_view_all_methods _________\n\nself = <r2e_tests.test_scripts.test_proutes.TestPRoutesCommand testMethod=test_one_route_only_post_view_all_methods>\n\n    def test_one_route_only_post_view_all_methods(self):\n        from pyramid.renderers import null_renderer as nr\n    \n        def view1(context, request): return 'view1'\n    \n        config = self._makeConfig(autocommit=True)\n        config.add_route('foo', '/a/b', request_method='POST')\n        config.add_view(\n            route_name='foo',\n            view=view1,\n            renderer=nr,\n        )\n    \n        command = self._makeOne()\n        L = []\n        command.out = L.append\n        command.bootstrap = dummy.DummyBootstrap(registry=config.registry)\n        result = command.run()\n        self.assertEqual(result, 0)\n        self.assertEqual(len(L), 3)\n        compare_to = L[-1].split()\n        expected = [\n            'foo', '/a/b',\n            'pyramid.tests.test_scripts.test_proutes.view1', 'POST'\n        ]\n>       self.assertEqual(compare_to, expected)\nE       AssertionError: Lists differ: ['foo', '/a/b', 'r2e_tests.test_scripts.test_proutes.view1', 'POST'] != ['foo', '/a/b', 'pyramid.tests.test_scripts.test_proutes.view1', 'POST']\nE       \nE       First differing element 2:\nE       'r2e_tests.test_scripts.test_proutes.view1'\nE       'pyramid.tests.test_scripts.test_proutes.view1'\nE       \nE       - ['foo', '/a/b', 'r2e_tests.test_scripts.test_proutes.view1', 'POST']\nE       ?                   ^^^\nE       \nE       + ['foo', '/a/b', 'pyramid.tests.test_scripts.test_proutes.view1', 'POST']\nE       ?                  ++ ^^^^^\n\nr2e_tests/test_scripts/test_proutes.py:369: AssertionError\n________ TestPRoutesCommand.test_one_route_only_post_view_post_and_get _________\n\nself = <r2e_tests.test_scripts.test_proutes.TestPRoutesCommand testMethod=test_one_route_only_post_view_post_and_get>\n\n    def test_one_route_only_post_view_post_and_get(self):\n        from pyramid.renderers import null_renderer as nr\n    \n        def view1(context, request): return 'view1'\n    \n        config = self._makeConfig(autocommit=True)\n        config.add_route('foo', '/a/b', request_method='POST')\n        config.add_view(\n            route_name='foo',\n            view=view1,\n            renderer=nr,\n            request_method=('POST', 'GET')\n        )\n    \n        command = self._makeOne()\n        L = []\n        command.out = L.append\n        command.bootstrap = dummy.DummyBootstrap(registry=config.registry)\n        result = command.run()\n        self.assertEqual(result, 0)\n        self.assertEqual(len(L), 3)\n        compare_to = L[-1].split()\n        expected = [\n            'foo', '/a/b',\n            'pyramid.tests.test_scripts.test_proutes.view1', 'POST'\n        ]\n>       self.assertEqual(compare_to, expected)\nE       AssertionError: Lists differ: ['foo', '/a/b', 'r2e_tests.test_scripts.test_proutes.view1', 'POST'] != ['foo', '/a/b', 'pyramid.tests.test_scripts.test_proutes.view1', 'POST']\nE       \nE       First differing element 2:\nE       'r2e_tests.test_scripts.test_proutes.view1'\nE       'pyramid.tests.test_scripts.test_proutes.view1'\nE       \nE       - ['foo', '/a/b', 'r2e_tests.test_scripts.test_proutes.view1', 'POST']\nE       ?                   ^^^\nE       \nE       + ['foo', '/a/b', 'pyramid.tests.test_scripts.test_proutes.view1', 'POST']\nE       ?                  ++ ^^^^^\n\nr2e_tests/test_scripts/test_proutes.py:397: AssertionError\n_____ TestPRoutesCommand.test_one_route_with_long_name_one_view_registered _____\n\nself = <r2e_tests.test_scripts.test_proutes.TestPRoutesCommand testMethod=test_one_route_with_long_name_one_view_registered>\n\n    def test_one_route_with_long_name_one_view_registered(self):\n        from zope.interface import Interface\n        from pyramid.interfaces import IRouteRequest\n        from pyramid.interfaces import IViewClassifier\n        from pyramid.interfaces import IView\n        registry = self._makeRegistry()\n    \n        def view():pass\n    \n        class IMyRoute(Interface):\n            pass\n    \n        registry.registerAdapter(\n            view,\n            (IViewClassifier, IMyRoute, Interface),\n            IView, ''\n        )\n    \n        registry.registerUtility(IMyRoute, IRouteRequest,\n                                 name='very_long_name_123')\n    \n        command = self._makeOne()\n        route = dummy.DummyRoute(\n            'very_long_name_123',\n            '/and_very_long_pattern_as_well'\n        )\n        mapper = dummy.DummyMapper(route)\n        command._get_mapper = lambda *arg: mapper\n        L = []\n        command.out = L.append\n        command.bootstrap = dummy.DummyBootstrap(registry=registry)\n        result = command.run()\n        self.assertEqual(result, 0)\n        self.assertEqual(len(L), 3)\n        compare_to = L[-1].split()[:3]\n>       self.assertEqual(\n            compare_to,\n            ['very_long_name_123',\n             '/and_very_long_pattern_as_well',\n             'pyramid.tests.test_scripts.test_proutes.view']\n        )\nE       AssertionError: Lists differ: ['ver[36 chars]ttern_as_well', 'r2e_tests.test_scripts.test_proutes.view'] != ['ver[36 chars]ttern_as_well', 'pyramid.tests.test_scripts.test_proutes.view']\nE       \nE       First differing element 2:\nE       'r2e_tests.test_scripts.test_proutes.view'\nE       'pyramid.tests.test_scripts.test_proutes.view'\nE       \nE         ['very_long_name_123',\nE          '/and_very_long_pattern_as_well',\nE       -  'r2e_tests.test_scripts.test_proutes.view']\nE       ?    ^^^\nE       \nE       +  'pyramid.tests.test_scripts.test_proutes.view']\nE       ?   ++ ^^^^^\n\nr2e_tests/test_scripts/test_proutes.py:201: AssertionError\n______ TestPRoutesCommand.test_route_is_get_view_request_method_not_post _______\n\nself = <r2e_tests.test_scripts.test_proutes.TestPRoutesCommand testMethod=test_route_is_get_view_request_method_not_post>\n\n    def test_route_is_get_view_request_method_not_post(self):\n        from pyramid.renderers import null_renderer as nr\n        from pyramid.config import not_\n    \n        def view1(context, request): return 'view1'\n    \n        config = self._makeConfig(autocommit=True)\n        config.add_route('foo', '/a/b', request_method='GET')\n        config.add_view(\n            route_name='foo',\n            view=view1,\n            renderer=nr,\n            request_method=not_('POST')\n        )\n    \n        command = self._makeOne()\n        L = []\n        command.out = L.append\n        command.bootstrap = dummy.DummyBootstrap(registry=config.registry)\n        result = command.run()\n        self.assertEqual(result, 0)\n        self.assertEqual(len(L), 3)\n        compare_to = L[-1].split()\n        expected = [\n            'foo', '/a/b',\n            'pyramid.tests.test_scripts.test_proutes.view1',\n            'GET'\n        ]\n>       self.assertEqual(compare_to, expected)\nE       AssertionError: Lists differ: ['foo', '/a/b', 'r2e_tests.test_scripts.test_proutes.view1', 'GET'] != ['foo', '/a/b', 'pyramid.tests.test_scripts.test_proutes.view1', 'GET']\nE       \nE       First differing element 2:\nE       'r2e_tests.test_scripts.test_proutes.view1'\nE       'pyramid.tests.test_scripts.test_proutes.view1'\nE       \nE       - ['foo', '/a/b', 'r2e_tests.test_scripts.test_proutes.view1', 'GET']\nE       ?                   ^^^\nE       \nE       + ['foo', '/a/b', 'pyramid.tests.test_scripts.test_proutes.view1', 'GET']\nE       ?                  ++ ^^^^^\n\nr2e_tests/test_scripts/test_proutes.py:537: AssertionError\n____________ TestPRoutesCommand.test_route_request_method_mismatch _____________\n\nself = <r2e_tests.test_scripts.test_proutes.TestPRoutesCommand testMethod=test_route_request_method_mismatch>\n\n    def test_route_request_method_mismatch(self):\n        from pyramid.renderers import null_renderer as nr\n    \n        def view1(context, request): return 'view1'\n    \n        config = self._makeConfig(autocommit=True)\n        config.add_route('foo', '/a/b', request_method='POST')\n        config.add_view(\n            route_name='foo',\n            view=view1,\n            renderer=nr,\n            request_method='GET'\n        )\n    \n        command = self._makeOne()\n        L = []\n        command.out = L.append\n        command.bootstrap = dummy.DummyBootstrap(registry=config.registry)\n        result = command.run()\n        self.assertEqual(result, 0)\n        self.assertEqual(len(L), 3)\n        compare_to = L[-1].split()\n        expected = [\n            'foo', '/a/b',\n            'pyramid.tests.test_scripts.test_proutes.view1',\n            '<route', 'mismatch>'\n        ]\n>       self.assertEqual(compare_to, expected)\nE       AssertionError: Lists differ: ['foo', '/a/b', 'r2e_tests.test_scripts.test_proutes.view1[20 chars]ch>'] != ['foo', '/a/b', 'pyramid.tests.test_scripts.test_proutes.v[24 chars]ch>']\nE       \nE       First differing element 2:\nE       'r2e_tests.test_scripts.test_proutes.view1'\nE       'pyramid.tests.test_scripts.test_proutes.view1'\nE       \nE         ['foo',\nE          '/a/b',\nE       -  'r2e_tests.test_scripts.test_proutes.view1',\nE       ?    ^^^\nE       \nE       +  'pyramid.tests.test_scripts.test_proutes.view1',\nE       ?   ++ ^^^^^\nE       \nE          '<route',\nE          'mismatch>']\n\nr2e_tests/test_scripts/test_proutes.py:426: AssertionError\n__________________ TestPRoutesCommand.test_route_static_views __________________\n\nself = <r2e_tests.test_scripts.test_proutes.TestPRoutesCommand testMethod=test_route_static_views>\n\n    def test_route_static_views(self):\n        from pyramid.renderers import null_renderer as nr\n        config = self._makeConfig(autocommit=True)\n        config.add_static_view('static', 'static', cache_max_age=3600)\n        path2 = os.path.normpath('/var/www/static')\n        config.add_static_view(name='static2', path=path2)\n        config.add_static_view(\n            name='pyramid_scaffold',\n            path='pyramid:scaffolds/starter/+package+/static'\n        )\n    \n        command = self._makeOne()\n        L = []\n        command.out = L.append\n        command.bootstrap = dummy.DummyBootstrap(registry=config.registry)\n        result = command.run()\n        self.assertEqual(result, 0)\n        self.assertEqual(len(L), 5)\n    \n        expected = [\n            ['__static/', '/static/*subpath',\n             'pyramid.tests.test_scripts:static/', '*'],\n            ['__static2/', '/static2/*subpath', path2 + os.sep, '*'],\n            ['__pyramid_scaffold/', '/pyramid_scaffold/*subpath',\n             'pyramid:scaffolds/starter/+package+/static/',  '*'],\n        ]\n    \n        for index, line in enumerate(L[2:]):\n            data = line.split()\n>           self.assertEqual(data, expected[index])\nE           AssertionError: Lists differ: ['__static/', '/static/*subpath', 'r2e_tests.test_scripts:static/', '*'] != ['__static/', '/static/*subpath', 'pyramid.tests.test_scripts:static/', '*']\nE           \nE           First differing element 2:\nE           'r2e_tests.test_scripts:static/'\nE           'pyramid.tests.test_scripts:static/'\nE           \nE           - ['__static/', '/static/*subpath', 'r2e_tests.test_scripts:static/', '*']\nE           ?                                     ^^^\nE           \nE           + ['__static/', '/static/*subpath', 'pyramid.tests.test_scripts:static/', '*']\nE           ?                                    ++ ^^^^^\n\nr2e_tests/test_scripts/test_proutes.py:457: AssertionError\n___________ TestPRoutesCommand.test_single_route_one_view_registered ___________\n\nself = <r2e_tests.test_scripts.test_proutes.TestPRoutesCommand testMethod=test_single_route_one_view_registered>\n\n    def test_single_route_one_view_registered(self):\n        from zope.interface import Interface\n        from pyramid.interfaces import IRouteRequest\n        from pyramid.interfaces import IViewClassifier\n        from pyramid.interfaces import IView\n        registry = self._makeRegistry()\n    \n        def view():pass\n        class IMyRoute(Interface):\n            pass\n        registry.registerAdapter(view,\n                                 (IViewClassifier, IMyRoute, Interface),\n                                 IView, '')\n        registry.registerUtility(IMyRoute, IRouteRequest, name='a')\n        command = self._makeOne()\n        route = dummy.DummyRoute('a', '/a')\n        mapper = dummy.DummyMapper(route)\n        command._get_mapper = lambda *arg: mapper\n        L = []\n        command.out = L.append\n        command.bootstrap = dummy.DummyBootstrap(registry=registry)\n        result = command.run()\n        self.assertEqual(result, 0)\n        self.assertEqual(len(L), 3)\n        compare_to = L[-1].split()[:3]\n>       self.assertEqual(\n            compare_to,\n            ['a', '/a', 'pyramid.tests.test_scripts.test_proutes.view']\n        )\nE       AssertionError: Lists differ: ['a', '/a', 'r2e_tests.test_scripts.test_proutes.view'] != ['a', '/a', 'pyramid.tests.test_scripts.test_proutes.view']\nE       \nE       First differing element 2:\nE       'r2e_tests.test_scripts.test_proutes.view'\nE       'pyramid.tests.test_scripts.test_proutes.view'\nE       \nE       - ['a', '/a', 'r2e_tests.test_scripts.test_proutes.view']\nE       ?               ^^^\nE       \nE       + ['a', '/a', 'pyramid.tests.test_scripts.test_proutes.view']\nE       ?              ++ ^^^^^\n\nr2e_tests/test_scripts/test_proutes.py:161: AssertionError\n______________________ TestPRoutesCommand.test_view_glob _______________________\n\nself = <r2e_tests.test_scripts.test_proutes.TestPRoutesCommand testMethod=test_view_glob>\n\n    def test_view_glob(self):\n        from pyramid.renderers import null_renderer as nr\n        from pyramid.config import not_\n    \n        def view1(context, request): return 'view1'\n        def view2(context, request): return 'view2'\n    \n        config = self._makeConfig(autocommit=True)\n        config.add_route('foo', '/a/b')\n        config.add_view(\n            route_name='foo',\n            view=view1,\n            renderer=nr,\n            request_method=not_('POST')\n        )\n    \n        config.add_route('bar', '/b/a')\n        config.add_view(\n            route_name='bar',\n            view=view2,\n            renderer=nr,\n            request_method=not_('POST')\n        )\n    \n        command = self._makeOne()\n        command.args.glob = '*foo*'\n    \n        L = []\n        command.out = L.append\n        command.bootstrap = dummy.DummyBootstrap(registry=config.registry)\n        result = command.run()\n        self.assertEqual(result, 0)\n        self.assertEqual(len(L), 3)\n        compare_to = L[-1].split()\n        expected = [\n            'foo', '/a/b',\n            'pyramid.tests.test_scripts.test_proutes.view1',\n            '!POST,*'\n        ]\n>       self.assertEqual(compare_to, expected)\nE       AssertionError: Lists differ: ['foo', '/a/b', 'r2e_tests.test_scripts.test_proutes.view1', '!POST,*'] != ['foo', '/a/b', 'pyramid.tests.test_scripts.test_proutes.view1', '!POST,*']\nE       \nE       First differing element 2:\nE       'r2e_tests.test_scripts.test_proutes.view1'\nE       'pyramid.tests.test_scripts.test_proutes.view1'\nE       \nE       - ['foo', '/a/b', 'r2e_tests.test_scripts.test_proutes.view1', '!POST,*']\nE       ?                   ^^^\nE       \nE       + ['foo', '/a/b', 'pyramid.tests.test_scripts.test_proutes.view1', '!POST,*']\nE       ?                  ++ ^^^^^\n\nr2e_tests/test_scripts/test_proutes.py:608: AssertionError\n_____________ TestPRoutesCommand.test_view_request_method_not_post _____________\n\nself = <r2e_tests.test_scripts.test_proutes.TestPRoutesCommand testMethod=test_view_request_method_not_post>\n\n    def test_view_request_method_not_post(self):\n        from pyramid.renderers import null_renderer as nr\n        from pyramid.config import not_\n    \n        def view1(context, request): return 'view1'\n    \n        config = self._makeConfig(autocommit=True)\n        config.add_route('foo', '/a/b')\n        config.add_view(\n            route_name='foo',\n            view=view1,\n            renderer=nr,\n            request_method=not_('POST')\n        )\n    \n        command = self._makeOne()\n        L = []\n        command.out = L.append\n        command.bootstrap = dummy.DummyBootstrap(registry=config.registry)\n        result = command.run()\n        self.assertEqual(result, 0)\n        self.assertEqual(len(L), 3)\n        compare_to = L[-1].split()\n        expected = [\n            'foo', '/a/b',\n            'pyramid.tests.test_scripts.test_proutes.view1',\n            '!POST,*'\n        ]\n>       self.assertEqual(compare_to, expected)\nE       AssertionError: Lists differ: ['foo', '/a/b', 'r2e_tests.test_scripts.test_proutes.view1', '!POST,*'] != ['foo', '/a/b', 'pyramid.tests.test_scripts.test_proutes.view1', '!POST,*']\nE       \nE       First differing element 2:\nE       'r2e_tests.test_scripts.test_proutes.view1'\nE       'pyramid.tests.test_scripts.test_proutes.view1'\nE       \nE       - ['foo', '/a/b', 'r2e_tests.test_scripts.test_proutes.view1', '!POST,*']\nE       ?                   ^^^\nE       \nE       + ['foo', '/a/b', 'pyramid.tests.test_scripts.test_proutes.view1', '!POST,*']\nE       ?                  ++ ^^^^^\n\nr2e_tests/test_scripts/test_proutes.py:567: AssertionError\n_____________ TestPServeCommand.test_config_file_finds_watch_files _____________\n\nself = <r2e_tests.test_scripts.test_pserve.TestPServeCommand testMethod=test_config_file_finds_watch_files>\n\n    def test_config_file_finds_watch_files(self):\n        inst = self._makeOne('development.ini')\n        loader = self.loader('/base/path.ini')\n        loader.settings = {'pserve': {\n            'watch_files': 'foo\\n/baz\\npyramid.tests.test_scripts:*.py',\n        }}\n        inst.pserve_file_config(loader, global_conf={'a': '1'})\n        self.assertEqual(loader.calls[0]['defaults'], {\n            'a': '1',\n        })\n>       self.assertEqual(inst.watch_files, set([\n            os.path.abspath('/base/foo'),\n            os.path.abspath('/baz'),\n            os.path.abspath(os.path.join(here, '*.py')),\n        ]))\nE       AssertionError: Items in the first set but not the second:\nE       '/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/pyramid/tests/test_scripts/*.py'\nE       Items in the second set but not the first:\nE       '/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_a9cd71dd14eb357bd1a538e2763ab6b78f1bc047/r2e_tests/test_scripts/*.py'\n\nr2e_tests/test_scripts/test_pserve.py:64: 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.config_uri = '/foo/bar/myapp.ini#myapp'\n        command.args.url = '/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:301: 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_cookie_max_age_invalid\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_invalid\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_str_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_invalid\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test_timeout_never\nPASSED r2e_tests/test_1.py::TestBaseCookieSession::test_timeout_str\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_cookie_max_age_invalid\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_invalid\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_str_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_invalid\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_timeout_never\nPASSED r2e_tests/test_1.py::TestSignedCookieSession::test_timeout_str\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_invalid\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test_timeout_never\nPASSED r2e_tests/test_1.py::TestUnencryptedCookieSession::test_timeout_str\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_serialize::test_it_with_highorder_secret\nPASSED r2e_tests/test_1.py::Test_signed_serialize::test_it_with_latin1_secret\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_1.py::Test_signed_deserialize::test_it_with_highorder_secret\nPASSED r2e_tests/test_1.py::Test_signed_deserialize::test_it_with_latin1_secret\nPASSED r2e_tests/test_1.py::TestPickleSerializer::test_dumps\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_object_event_subscriber\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_resource_url_default_resource_iface_means_Interface\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_resource_url_nodefault_resource_iface\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_response_adapter\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_response_adapter_dottednames\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_response_adapter_self\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_subscriber_defaults\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_subscriber_dottednames\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_subscriber_iface_specified\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_subscriber_predicate\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_subscriber_with_default_type_predicates_False\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_subscriber_with_default_type_predicates_True\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_subscriber_with_specific_type_and_predicates_False\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_subscriber_with_specific_type_and_predicates_True\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_traverser_default_iface_means_Interface\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_traverser_introspectables\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_traverser_nondefault_iface\nPASSED r2e_tests/test_config/test_adapters.py::Test_eventonly::test_defaults\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test__override_already_registered\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test__override_not_yet_registered\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_directory_with_absdirectory\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_directory_with_absfile\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_directory_with_file\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_file_with_absdirectory\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_file_with_absfile\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_file_with_directory\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_file_with_missing_abspath\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_file_with_package\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_package_with_absdirectory\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_samename\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_filename_override_returns_value\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_stream_no_overrides\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_stream_override_returns_None\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_stream_override_returns_value\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_string_no_overrides\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_string_override_returns_None\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_string_override_returns_value\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_has_resource_no_overrides\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_has_resource_override_returns_None\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_has_resource_override_returns_True\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_resource_isdir_no_overrides\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_resource_isdir_override_returns_False\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_resource_isdir_override_returns_None\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_resource_listdir_no_overrides\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_resource_listdir_override_returns_None\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_resource_listdir_override_returns_values\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_class_conforms_to_IPEP302Loader\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_class_conforms_to_IPackageOverrides\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_ctor_package_already_has_loader_of_different_type\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_ctor_package_already_has_loader_of_same_type\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_ctor_registers_loader_type\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_ctor_sets_loader\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_ctor_sets_local_state\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_filtered_sources\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_get_code_pkg_has___loader__\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_get_code_pkg_has_no___loader__\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_get_data_pkg_has___loader__\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_get_data_pkg_has_no___loader__\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_get_filename\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_get_filename_file_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_get_source_pkg_has___loader__\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_get_source_pkg_has_no___loader__\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_get_stream\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_get_stream_file_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_get_string\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_get_string_file_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_has_resource\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_has_resource_file_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_insert_directory\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_insert_emptystring\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_insert_file\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_instance_conforms_to_IPEP302Loader\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_instance_conforms_to_IPackageOverrides\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_is_package_pkg_has___loader__\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_is_package_pkg_has_no___loader__\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_isdir_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_isdir_false\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_isdir_true\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_listdir\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_listdir_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_exists\nPASSED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_exists_file_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_exists_with_prefix\nPASSED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_get_filename_file_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_get_stream\nPASSED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_get_stream_file_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_get_stream_with_prefix\nPASSED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_get_string\nPASSED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_get_string_file_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_get_string_with_prefix\nPASSED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_isdir_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_isdir_false\nPASSED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_isdir_true\nPASSED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_listdir\nPASSED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_listdir_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_exists\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_exists_file_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_exists_with_prefix\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_get_filename\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_get_filename_file_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_get_filename_with_prefix\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_get_stream\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_get_stream_file_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_get_stream_with_prefix\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_get_string\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_get_string_file_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_get_string_with_prefix\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_isdir_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_isdir_false\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_isdir_true\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_listdir\nPASSED r2e_tests/test_config/test_assets.py::TestFSAssetSource::test_listdir_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestDirectoryOverride::test_it_match\nPASSED r2e_tests/test_config/test_assets.py::TestDirectoryOverride::test_it_no_match\nPASSED r2e_tests/test_config/test_assets.py::TestFileOverride::test_it_match\nPASSED r2e_tests/test_config/test_assets.py::TestFileOverride::test_it_no_match\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_add_request_method_with_None_callable\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_add_request_method_with_None_callable_and_no_name\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_add_request_method_with_None_callable_conflict\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_add_request_method_with_callable\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_add_request_method_with_text_type_name\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_add_request_method_with_unnamed_callable\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_execution_policy\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_execution_policy_to_None\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_multiple_request_methods_conflict\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_request_factory\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_request_factory_dottedname\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_response_factory\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_response_factory_dottedname\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_root_factory\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_root_factory_as_None\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_root_factory_dottedname\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_session_factory\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_session_factory_dottedname\nPASSED r2e_tests/test_config/test_factories.py::TestDeprecatedFactoriesMixinMethods::test_set_multiple_request_properties\nPASSED r2e_tests/test_config/test_factories.py::TestDeprecatedFactoriesMixinMethods::test_set_multiple_request_properties_conflict\nPASSED r2e_tests/test_config/test_factories.py::TestDeprecatedFactoriesMixinMethods::test_set_request_property_with_callable\nPASSED r2e_tests/test_config/test_factories.py::TestDeprecatedFactoriesMixinMethods::test_set_request_property_with_property\nPASSED r2e_tests/test_config/test_factories.py::TestDeprecatedFactoriesMixinMethods::test_set_request_property_with_unnamed_callable\nPASSED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_add_translation_dirs_invalid_kwargs\nPASSED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_add_translation_dirs_missing_dir\nPASSED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_add_translation_dirs_no_specs\nPASSED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_set_locale_negotiator\nPASSED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_set_locale_negotiator_dottedname\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test___getattr__matches\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test___getattr__matches_no_action_wrap\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test___getattr__missing_when_directives_dont_exist\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test___getattr__missing_when_directives_exist\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test__fix_registry_adds__lock\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test__fix_registry_adds_clear_view_lookup_cache\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test__fix_registry_has_listeners\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test__fix_registry_notify\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test__fix_registry_queryAdapterOrSelf\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test__fix_registry_registerSelfAdapter\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_absolute_asset_spec_already_absolute\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_absolute_asset_spec_notastring\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_absolute_asset_spec_relative\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_action_autocommit_with_introspectables\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_action_autocommit_with_introspectables_introspection_off\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_action_branching_kw_is_None\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_action_branching_kw_is_not_None\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_action_branching_nonautocommit_with_config_info\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_action_branching_nonautocommit_with_introspectables\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_action_branching_nonautocommit_without_config_info\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_action_nonautocommit_with_introspectables_introspection_off\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_autocommit_no_conflicts\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_begin\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_begin_does_not_propagate_request_for_diff_registry\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_begin_overrides_request\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_begin_propagates_request_for_same_registry\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_context_manager\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_threadlocals_active\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_include_with_dotted_name\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_include_with_missing_source_file\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_include_with_module_defaults_to_includeme\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_include_with_module_defaults_to_includeme_missing\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_include_with_nested_route_prefix\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_include_with_python_callable\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_include_with_route_prefix\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_introspector_decorator\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_make_wsgi_app\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_maybe_dotted_notstring_success\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_maybe_dotted_string_fail\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_maybe_dotted_string_success\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_scan_integration\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_scan_integration_dottedname_package\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_scan_integration_with_extra_kw\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_scan_integration_with_ignore\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_scan_integration_with_onerror\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_alternate_renderers\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_authentication_policy\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_authentication_policy_dottedname\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_authorization_policy_dottedname\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_authorization_policy_only\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_calls_fix_registry\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_custom_settings\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_debug_logger_name\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_debug_logger_non_None\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_default_permission\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_dottedname_root_factory\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_explicit_notfound_trumps_iexceptionresponse\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_includes\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_includes_spaces\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_locale_negotiator\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_locale_negotiator_dottedname\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_no_default_root_factory\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_registers_default_exceptionresponse_views\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_registers_default_view_predicates\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_registers_default_webob_iresponse_adapter\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_request_factory\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_request_factory_dottedname\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_response_factory\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_tweens\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_unhook_zca\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_with_package\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_with_package_module\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_with_package_package\nPASSED r2e_tests/test_config/test_init.py::TestConfigurator_add_directive::test_directive_persists_across_configurator_creations\nPASSED r2e_tests/test_config/test_init.py::TestConfigurator_add_directive::test_extend_action_method_successful\nPASSED r2e_tests/test_config/test_init.py::TestConfigurator_add_directive::test_extend_same_name_doesnt_conflict\nPASSED r2e_tests/test_config/test_init.py::TestConfigurator__add_predicate::test_factory_as_object\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_action_simple\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_action_with_includepath\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_action_with_includepath_and_info\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_action_with_info\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_action_with_introspectables\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_action_with_order\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_execute_actions_dicts\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_execute_actions_error\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_execute_actions_tuples\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_execute_actions_with_introspectable_no_callable\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_execute_actions_with_introspectables\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_executing_conflicting_action_across_orders\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_executing_conflicting_action_across_reentrant_orders\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_it\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_processSpec\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_reentrant_action\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_reentrant_action_error\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_reentrant_action_with_deferred_discriminator\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_reentrant_action_without_clear\nPASSED r2e_tests/test_config/test_init.py::Test_reentrant_action_functional::test_deferred_discriminator\nPASSED r2e_tests/test_config/test_init.py::Test_reentrant_action_functional::test_functional\nPASSED r2e_tests/test_config/test_init.py::Test_resolveConflicts::test_conflicts_across_orders\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::Test_resolveConflicts::test_override_success_across_orders\nPASSED r2e_tests/test_config/test_init.py::TestGlobalRegistriesIntegration::test_global_registries\nPASSED r2e_tests/test_config/test_init.py::TestGlobalRegistriesIntegration::test_global_registries_empty\nPASSED r2e_tests/test_config/test_rendering.py::TestRenderingConfiguratorMixin::test_add_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_changing_set_default_csrf_options\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_csrf_options\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__set_settings_does_not_uses_original_dict\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::TestSettingsConfiguratorMixin::test_settings_parameter_dict_is_never_updated\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_csrf_trusted_origins\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_noargs\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_originals_kept\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_prevent_cachebust\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_prevent_http_cache\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_reload_all\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_reload_assets\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_reload_resources\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_reload_templates\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_add_renderer\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_add_renderer_explicitrenderer\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_add_renderer_twice\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_add_subscriber_defaults\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_add_subscriber_dottedname\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_add_subscriber_multiple\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_add_subscriber_single\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_add_template\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_resources\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_securitypolicy\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_securitypolicy_forget_result\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_securitypolicy_remember_result\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tween_dottedname\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tween_instance\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tween_name_ingress\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tween_name_main\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tween_over_ingress\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tween_over_ingress_iterable\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tween_under_main\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tween_under_main_iterable\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tween_unsuitable\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tweens_conflict\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tweens_names_distinct\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tweens_names_with_over_nonstringoriter\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tweens_names_with_under_nonstringoriter\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tweens_names_with_underover\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test___call___explicit\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test___call___implicit\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_add_explicit\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_add_implicit\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_1\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_2\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_3\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_4\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_5\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_conflict_direct\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_conflict_indirect\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_missing_over_and_under_partials\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_missing_over_partial\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_missing_over_partial_with_fallback\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_missing_under_partial\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_missing_under_partial_with_fallback\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_with_missing_fallbacks\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_with_multiple_matching_fallbacks\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_with_partial_fallbacks\nPASSED r2e_tests/test_config/test_util.py::TestActionInfo::test___str__\nPASSED r2e_tests/test_config/test_util.py::TestActionInfo::test_class_conforms\nPASSED r2e_tests/test_config/test_util.py::TestActionInfo::test_ctor\nPASSED r2e_tests/test_config/test_util.py::TestActionInfo::test_instance_conforms\nPASSED r2e_tests/test_config/test_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_close_matches\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::TestDeprecatedPredicates::test_it\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_exception_view\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_exception_view_disallows_exception_only\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_exception_view_disallows_for_\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_exception_view_disallows_name\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_exception_view_disallows_permission\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_exception_view_disallows_require_csrf\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_exception_view_with_subclass\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_exception_view_with_view_defaults\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_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_disallows_require_csrf\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_forbidden_view_no_view_argument\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_forbidden_view_with_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_forbidden_view_with_view_defaults\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_normal_and_exception_view_intr_derived_callable\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_notfound_view\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_notfound_view_allows_other_predicates\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_notfound_view_append_slash\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_notfound_view_append_slash_custom_response\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_notfound_view_disallows_context\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_notfound_view_disallows_for_\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_notfound_view_disallows_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_disallows_require_csrf\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_notfound_view_no_view_argument\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_notfound_view_with_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_notfound_view_with_view_defaults\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_static_view_absolute\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_static_view_here_no_utility_registered\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_static_view_package_relative\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_as_instance\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_as_instance_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_as_instancemethod\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_as_instancemethod_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_as_oldstyle_class\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_as_oldstyle_class_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_class_method_no_attr\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_context_as_class\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_context_as_dottedname\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_context_as_iface\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_context_trumps_for\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_custom_more_preds_first_bests_fewer_preds_last\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_custom_predicate_bests_standard_predicate\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_default_phash_overrides_default_phash\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_default_phash_overrides_no_phash\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_exc_default_phash_overrides_default_phash\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_exc_default_phash_overrides_no_phash\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_exc_multiview_replaces_existing_securedview\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_exc_multiview_replaces_existing_view\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_exc_multiview_replaces_multiviews\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_exc_multiview_replaces_only_exc_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_only\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_exception_only_misconfiguration\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_exception_only_no_regular_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_check_csrf_predicates_match\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_csrf_header\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_csrf_param\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_custom_predicates_match\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_custom_predicates_nomatch\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_decorator\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_decorator_tuple\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_default_permission_no_explicit_permission\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_default_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_function_callable\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_function_callable_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_header_badregex\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_header_noval_match\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_header_noval_nomatch\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_header_val_match\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_header_val_missing\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_header_val_nomatch\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_http_cache\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_mapper\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_missing_csrf_header\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_name\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_name_unicode\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_no_default_permission_no_explicit_permission\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_nonexistant_route_name\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_path_info_badregex\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_path_info_match\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_path_info_nomatch\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_permission\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_method_false\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_method_get_implies_head\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_method_sequence_conflict\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_method_sequence_false\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_method_sequence_true\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_method_true\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_param_noval_false\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_param_noval_true\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_param_val_false\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_param_val_true\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_type\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_type_and_route_name\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_type_as_iface\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_type_as_noniface\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_route_name\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_route_name_exception\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_tmpl_renderer_factory_introspector_missing\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_tmpl_renderer_factory_no_renderer_factory\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_tmpl_renderer_factory_with_renderer_factory\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_view_config_and_view_defaults_conflicts\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_view_config_and_view_defaults_doesnt_conflict\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_view_defaults\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_view_defaults_viewname_is_dottedname_kwarg\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_view_defaults_viewname_is_dottedname_nonkwarg\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_xhr_false\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_xhr_true\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_wrapped_view_is_decorated\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_views_with_accept_multiview_replaces_existing\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_derive_view_dottedname\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_derive_view_function\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_derive_view_with_default_renderer_no_explicit_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_derive_view_with_default_renderer_with_explicit_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_set_view_mapper\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_set_view_mapper_dottedname\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_view_with_most_specific_predicate\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_view_with_most_specific_predicate_with_mismatch\nPASSED r2e_tests/test_config/test_views.py::Test_runtime_exc_view::test_call\nPASSED r2e_tests/test_config/test_views.py::Test_runtime_exc_view::test_call_dispatches_on_exception\nPASSED r2e_tests/test_config/test_views.py::Test_runtime_exc_view::test_permitted\nPASSED r2e_tests/test_config/test_views.py::Test_runtime_exc_view::test_permitted_dispatches_on_exception\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::TestDefaultViewMapper::test__view_as_function_with_attr\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_function_context_and_request\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_function_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_function_requestonly_with_attr\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_instance_context_and_request\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_instance_context_and_request_and_attr\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_instance_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_instance_requestonly_with_attr\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_newstyle_class_context_and_request\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_newstyle_class_context_and_request_with_attr\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_newstyle_class_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_newstyle_class_requestonly_with_attr\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_oldstyle_class_context_and_request\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_oldstyle_class_context_and_request_with_attr\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_oldstyle_class_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_oldstyle_class_requestonly_with_attr\nPASSED r2e_tests/test_config/test_views.py::Test_preserve_view_attrs::test_it_different\nPASSED r2e_tests/test_config/test_views.py::Test_preserve_view_attrs::test_it_different_with_existing_original_view\nPASSED r2e_tests/test_config/test_views.py::Test_preserve_view_attrs::test_it_same\nPASSED r2e_tests/test_config/test_views.py::Test_preserve_view_attrs::test_it_view_is_None\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_already_exists\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_cachebust_prevented\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_cachebuster\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_cachebuster_abspath\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_cachebuster_for_more_specific_path\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_cachebuster_overwrite\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_cachebuster_overwrite_explicit\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_package_root\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_url_noendslash\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_url_noscheme\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_url_withendslash\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_viewname\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_viewname_with_context\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_viewname_with_for_\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_viewname_with_permission\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_viewname_with_renderer\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_viewname_with_route_prefix\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_missing\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_quoting\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_registration_miss\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_route_url\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_slash_in_name1\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_slash_in_name2\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_url_cachebust\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_url_cachebust_abspath\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_url_cachebust_nomatch\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_url_quoted_remote\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_url_unquoted_local\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_url_with_custom_anchor\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_url_with_custom_query\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_verifyClass\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_verifyObject\nPASSED r2e_tests/test_config/test_views.py::Test_view_description::test_with_text\nPASSED r2e_tests/test_config/test_views.py::Test_viewdefaults::test_dunder_attrs_copied\nPASSED r2e_tests/test_scripts/test_common.py::TestParseVars::test_parse_vars_bad\nPASSED r2e_tests/test_scripts/test_common.py::TestParseVars::test_parse_vars_good\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_confirm_override_conflicting_name\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_force_override_conflicting_name\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_force_override_site_name\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_known_scaffold_absolute_path\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_known_scaffold_multiple_rendered\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_known_scaffold_single_rendered\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_known_scaffold_with_path_as_project_target_rendered\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_no_project_name\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_run_no_scaffold_name\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_run_no_scaffold_no_args\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_run_show_scaffolds_exist\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_run_show_scaffolds_none_exist\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_scaffold_with_dev_pyramid_long_version\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_scaffold_with_dev_pyramid_version\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_scaffold_with_hyphen_in_project_name\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_scaffold_with_package_name\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_scaffold_with_prod_pyramid_long_version\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_scaffold_with_prod_pyramid_unparsable_version\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_scaffold_with_prod_pyramid_version\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_unknown_scaffold_name\nPASSED r2e_tests/test_scripts/test_pcreate.py::Test_main::test_it\nPASSED r2e_tests/test_scripts/test_pdistreport.py::TestPDistReportCommand::test_no_dists\nPASSED r2e_tests/test_scripts/test_pdistreport.py::TestPDistReportCommand::test_with_dists\nPASSED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_display_headers\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_has_content_type_header_var\nPASSED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_has_good_header_var\nPASSED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_has_multiple_header_vars\nPASSED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_method_configures_logging\nPASSED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_method_get\nPASSED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_method_options\nPASSED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_method_patch\nPASSED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_method_post\nPASSED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_method_propfind\nPASSED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_method_put\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_path_doesnt_start_with_slash\nPASSED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_response_has_no_charset\nPASSED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_two_args\nPASSED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_w_basic_auth\nPASSED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_with_query_string\nPASSED r2e_tests/test_scripts/test_prequest.py::Test_main::test_it\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test__get_mapper\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_bad_args\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_bad_format\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_class_view\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_config_format_ini_commas\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_config_format_ini_newlines\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_config_format_ini_spaces\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_good_args\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_good_format\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_no_mapper\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_no_routes\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_route_as_wsgiapp\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_route_no_view\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_route_with_no_slash_prefix\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_single_route_multiview_registered\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_single_route_no_route_registered\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_single_route_no_views_registered\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_single_route_one_view_registered_with_factory\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_static_routes_included_in_list\nPASSED r2e_tests/test_scripts/test_proutes.py::Test_main::test_it\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_config_file_finds_open_url\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_guess_server_url\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_reload_call_hupper_with_correct_args\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_run_no_args\nPASSED r2e_tests/test_scripts/test_pserve.py::Test_main::test_it\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_custom_section_override\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_default_shell_option\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_errors_with_unknown_shell\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_loads_check_variable_override_order\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_loads_custom_items\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_loads_default_shell\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_loads_ipython\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_loads_pythonstartup\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_loads_setup_from_options\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_setup\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_setup_generator\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_list_shells\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_shell_entry_points\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_shell_ordering\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_shell_override\nPASSED r2e_tests/test_scripts/test_pshell.py::Test_python_shell_runner::test_it\nPASSED r2e_tests/test_scripts/test_pshell.py::Test_main::test_it\nPASSED r2e_tests/test_scripts/test_ptweens.py::TestPTweensCommand::test__get_tweens\nPASSED r2e_tests/test_scripts/test_ptweens.py::TestPTweensCommand::test_command_implicit_and_explicit_tweens\nPASSED r2e_tests/test_scripts/test_ptweens.py::TestPTweensCommand::test_command_implicit_tweens_only\nPASSED r2e_tests/test_scripts/test_ptweens.py::TestPTweensCommand::test_command_no_tweens\nPASSED r2e_tests/test_scripts/test_ptweens.py::Test_main::test_it\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_multi_routes_all_match\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_multi_routes_none_match\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_multi_routes_some_match\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_view_no_match\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_view_no_match_multiview_registered\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_view_route_multiview\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_view_route_multiview_no_view_registered\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_view_route_no_multiview\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_view_traversal\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_view_traversal_multiview\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_multi_view_nested\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_multiview\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_multiview_with_permission\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_multiview_with_predicates\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_not_found\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_not_found_url_starts_without_slash\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_single_view_route\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_single_view_route_with_route_predicates\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_single_view_traversal\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_single_view_traversal_with_permission\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_single_view_traversal_with_predicates\nPASSED r2e_tests/test_scripts/test_pviews.py::Test_main::test_it\nFAILED r2e_tests/test_1.py::TestSignedCookieSession::test_bad_pickle - Attrib...\nFAILED r2e_tests/test_1.py::TestPickleSerializer::test_loads - AttributeError...\nFAILED r2e_tests/test_1.py::TestPickleSerializer::test_loads_raises_ValueError_on_bad_import\nFAILED r2e_tests/test_1.py::TestPickleSerializer::test_loads_raises_ValueError_on_invalid_data\nFAILED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_resource_url_adapter_dotted_names\nFAILED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_resource_url_adapter_introspectables\nFAILED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_traverser_dotted_names\nFAILED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_directory_with_directory\nFAILED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_directory_with_package\nFAILED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_file_with_file\nFAILED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_package_with_directory\nFAILED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_package_with_package\nFAILED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_filename_no_overrides\nFAILED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_filename_override_returns_None\nFAILED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_get_filename\nFAILED r2e_tests/test_config/test_assets.py::TestPackageAssetSource::test_get_filename_with_prefix\nFAILED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_add_translation_dirs_abspath\nFAILED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_add_translation_dirs_asset_spec\nFAILED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_add_translation_dirs_asset_spec_existing_translation_dirs\nFAILED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_add_translation_dirs_doesnt_use_override_w_autocommit\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_i18n.py::TestI18NConfiguratorMixin::test_add_translation_dirs_override_multiple_specs_multiple_calls\nFAILED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_add_translation_dirs_uses_override_out_of_order\nFAILED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_add_translation_dirs_uses_override_w_autocommit\nFAILED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_no_registry\nFAILED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_noreg_debug_logger_None_default\nFAILED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_include_constant_root_package\nFAILED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_scan_integration_conflict\nFAILED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_debug_logger_None_default\nFAILED r2e_tests/test_config/test_init.py::TestConfigurator_add_directive::test_add_directive_with_custom_callable\nFAILED r2e_tests/test_config/test_init.py::TestConfigurator_add_directive::test_add_directive_with_partial\nFAILED r2e_tests/test_config/test_init.py::TestConfigurator_add_directive::test_extend_with_dotted_name\nFAILED r2e_tests/test_config/test_init.py::TestConfigurator_add_directive::test_extend_with_python_callable\nFAILED r2e_tests/test_config/test_init.py::TestConfigurator__add_predicate::test_factory_as_dotted_name\nFAILED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_static_view_package_here_relative\nFAILED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_template_renderer\nFAILED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_template_renderer_no_callable\nFAILED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_url_cachebust_with_overrides\nFAILED r2e_tests/test_config/test_views.py::Test_view_description::test_without_text\nFAILED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_one_route_all_methods_view_only_post\nFAILED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_one_route_only_post_view_all_methods\nFAILED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_one_route_only_post_view_post_and_get\nFAILED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_one_route_with_long_name_one_view_registered\nFAILED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_route_is_get_view_request_method_not_post\nFAILED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_route_request_method_mismatch\nFAILED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_route_static_views\nFAILED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_single_route_one_view_registered\nFAILED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_view_glob\nFAILED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_view_request_method_not_post\nFAILED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_config_file_finds_watch_files\nFAILED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_single_view_function_traversal\n======================== 52 failed, 896 passed in 4.55s ========================\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:** Unhandled Exceptions Raised When Loading Invalid Pickle Session Data

**Description:**

When loading session data that contains invalid or corrupted pickle data, unexpected exceptions such as `AttributeError` or `UnpicklingError` are raised. This can lead to application crashes or improper session handling.

**Example Buggy Code:**

```python
import pickle

def load_session(session_data):
    return pickle.loads(session_data)

# Example of invalid session data referencing a non-existent class
invalid_data = b'(i__main__\nFoo\np0\n(dp1\nb.'
load_session(invalid_data)
```

**Actual Behavior:**

Attempting to load the above `invalid_data` results in an error like:

```
AttributeError: Can't get attribute 'Foo' on <module 'pytest.__main__' ...>
```

Similarly, loading data that is not properly pickled raises:

```
_pickle.UnpicklingError: invalid load key, 'n'.
```

**Expected Behavior:**

The session loading process should handle invalid or corrupted pickle data gracefully, avoiding unexpected exceptions and ensuring the application remains stable. Instead of raising low-level errors, it should manage such scenarios appropriately, possibly by resetting the session or providing a controlled error message.

[/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,
    PY2,
    text_,
    bytes_,
    native_,
    )
from pyramid.csrf import (
    check_csrf_origin,
    check_csrf_token,
)

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

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)
    try:
        # bw-compat with pyramid <= 1.5b1 where latin1 is the default
        secret = bytes_(secret)
    except UnicodeEncodeError:
        secret = bytes_(secret, 'utf-8')
    sig = hmac.new(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)

    try:
        # bw-compat with pyramid <= 1.5b1 where latin1 is the default
        secret = bytes_(secret)
    except UnicodeEncodeError:
        secret = bytes_(secret, 'utf-8')
    sig = bytes_(hmac.new(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)


class PickleSerializer(object):
    """ A serializer that uses the pickle protocol to dump Python
    data to bytes.

    This is the default serializer used by Pyramid.

    ``protocol`` may be specified to control the version of pickle used.
    Defaults to :attr:`pickle.HIGHEST_PROTOCOL`.

    """
    def __init__(self, protocol=pickle.HIGHEST_PROTOCOL):
        self.protocol = protocol

    def loads(self, bstruct):
        """Accept bytes and return a Python object."""
        return pickle.loads(bstruct)

    def dumps(self, appstruct):
        """Accept a Python object and return bytes."""
        return pickle.dumps(appstruct, self.protocol)

def BaseCookieSessionFactory(
    serializer,
    cookie_name='session',
    max_age=None,
    path='/',
    domain=None,
    secure=False,
    httponly=False,
    samesite='Lax',
    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``.

    ``samesite``
      The 'samesite' option of the session cookie. Set the value to ``None``
      to turn off the samesite option.  Default: ``'Lax'``.

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

    .. versionchanged: 1.10

       Added the ``samesite`` option and made the default ``'Lax'``.
    """

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

        # configuration parameters
        _cookie_name = cookie_name
        _cookie_max_age = max_age if max_age is None else int(max_age)
        _cookie_path = path
        _cookie_domain = domain
        _cookie_secure = secure
        _cookie_httponly = httponly
        _cookie_samesite = samesite
        _cookie_on_exception = set_on_exception
        _timeout = timeout if timeout is None else int(timeout)
        _reissue_time = reissue_time if reissue_time is None else int(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:
                    # 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
                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
            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 PY2:
            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,
                samesite=self._cookie_samesite,
                )
            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_samesite='Lax',
    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_samesite``
      The 'samesite' option of the session cookie. Set the value to ``None``
      to turn off the samesite option.  Default: ``'Lax'``.

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

    .. versionchanged: 1.10

       Added the ``samesite`` option and made the default ``'Lax'``.
    """

    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,
        samesite=cookie_samesite,
        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,
    samesite='Lax',
    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 512 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``.

    ``samesite``
      The 'samesite' option of the session cookie. Set the value to ``None``
      to turn off the samesite option.  Default: ``'Lax'``.

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

    .. versionchanged: 1.10

       Added the ``samesite`` option and made the default ``Lax``.
    """
    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,
        samesite=samesite,
        timeout=timeout,
        reissue_time=reissue_time,
        set_on_exception=set_on_exception,
    )

check_csrf_origin = check_csrf_origin  # api
deprecated('check_csrf_origin',
           'pyramid.session.check_csrf_origin is deprecated as of Pyramid '
           '1.9. Use pyramid.csrf.check_csrf_origin instead.')

check_csrf_token = check_csrf_token  # api
deprecated('check_csrf_token',
           'pyramid.session.check_csrf_token is deprecated as of Pyramid '
           '1.9. Use pyramid.csrf.check_csrf_token instead.')

```
--- 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:** Unhandled Exceptions Raised When Loading Invalid Pickle Session Data

**Description:**

When loading session data that contains invalid or corrupted pickle data, unexpected exceptions such as `AttributeError` or `UnpicklingError` are raised. This can lead to application crashes or improper session handling.

**Example Buggy Code:**

```python
import pickle

def load_session(session_data):
    return pickle.loads(session_data)

# Example of invalid session data referencing a non-existent class
invalid_data = b'(i__main__\nFoo\np0\n(dp1\nb.'
load_session(invalid_data)
```

**Actual Behavior:**

Attempting to load the above `invalid_data` results in an error like:

```
AttributeError: Can't get attribute 'Foo' on <module 'pytest.__main__' ...>
```

Similarly, loading data that is not properly pickled raises:

```
_pickle.UnpicklingError: invalid load key, 'n'.
```

**Expected Behavior:**

The session loading process should handle invalid or corrupted pickle data gracefully, avoiding unexpected exceptions and ensuring the application remains stable. Instead of raising low-level errors, it should manage such scenarios appropriately, possibly by resetting the session or providing a controlled error message.

[/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_cookie_max_age_invalid": "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_invalid": "PASSED",
    "TestBaseCookieSession.test_reissue_never": "PASSED",
    "TestBaseCookieSession.test_reissue_not_triggered": "PASSED",
    "TestBaseCookieSession.test_reissue_str_triggered": "PASSED",
    "TestBaseCookieSession.test_reissue_triggered": "PASSED",
    "TestBaseCookieSession.test_set_cookie_with_exception": "PASSED",
    "TestBaseCookieSession.test_timeout": "PASSED",
    "TestBaseCookieSession.test_timeout_invalid": "PASSED",
    "TestBaseCookieSession.test_timeout_never": "PASSED",
    "TestBaseCookieSession.test_timeout_str": "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_bad_pickle": "PASSED",
    "TestSignedCookieSession.test_changed": "PASSED",
    "TestSignedCookieSession.test_cookie_is_set": "PASSED",
    "TestSignedCookieSession.test_cookie_max_age_invalid": "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_invalid": "PASSED",
    "TestSignedCookieSession.test_reissue_never": "PASSED",
    "TestSignedCookieSession.test_reissue_not_triggered": "PASSED",
    "TestSignedCookieSession.test_reissue_str_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_invalid": "PASSED",
    "TestSignedCookieSession.test_timeout_never": "PASSED",
    "TestSignedCookieSession.test_timeout_str": "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_invalid": "PASSED",
    "TestUnencryptedCookieSession.test_timeout_never": "PASSED",
    "TestUnencryptedCookieSession.test_timeout_str": "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_serialize.test_it_with_highorder_secret": "PASSED",
    "Test_signed_serialize.test_it_with_latin1_secret": "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",
    "Test_signed_deserialize.test_it_with_highorder_secret": "PASSED",
    "Test_signed_deserialize.test_it_with_latin1_secret": "PASSED",
    "TestPickleSerializer.test_dumps": "PASSED",
    "TestPickleSerializer.test_loads_raises_ValueError_on_bad_import": "PASSED",
    "TestPickleSerializer.test_loads_raises_ValueError_on_invalid_data": "PASSED",
    "AdaptersConfiguratorMixinTests.test_add_object_event_subscriber": "PASSED",
    "AdaptersConfiguratorMixinTests.test_add_resource_url_default_resource_iface_means_Interface": "PASSED",
    "AdaptersConfiguratorMixinTests.test_add_resource_url_nodefault_resource_iface": "PASSED",
    "AdaptersConfiguratorMixinTests.test_add_response_adapter": "PASSED",
    "AdaptersConfiguratorMixinTests.test_add_response_adapter_dottednames": "PASSED",
    "AdaptersConfiguratorMixinTests.test_add_response_adapter_self": "PASSED",
    "AdaptersConfiguratorMixinTests.test_add_subscriber_defaults": "PASSED",
    "AdaptersConfiguratorMixinTests.test_add_subscriber_dottednames": "PASSED",
    "AdaptersConfiguratorMixinTests.test_add_subscriber_iface_specified": "PASSED",
    "AdaptersConfiguratorMixinTests.test_add_subscriber_predicate": "PASSED",
    "AdaptersConfiguratorMixinTests.test_add_subscriber_with_default_type_predicates_False": "PASSED",
    "AdaptersConfiguratorMixinTests.test_add_subscriber_with_default_type_predicates_True": "PASSED",
    "AdaptersConfiguratorMixinTests.test_add_subscriber_with_specific_type_and_predicates_False": "PASSED",
    "AdaptersConfiguratorMixinTests.test_add_subscriber_with_specific_type_and_predicates_True": "PASSED",
    "AdaptersConfiguratorMixinTests.test_add_traverser_default_iface_means_Interface": "PASSED",
    "AdaptersConfiguratorMixinTests.test_add_traverser_introspectables": "PASSED",
    "AdaptersConfiguratorMixinTests.test_add_traverser_nondefault_iface": "PASSED",
    "Test_eventonly.test_defaults": "PASSED",
    "TestAssetsConfiguratorMixin.test__override_already_registered": "PASSED",
    "TestAssetsConfiguratorMixin.test__override_not_yet_registered": "PASSED",
    "TestAssetsConfiguratorMixin.test_override_asset_directory_with_absdirectory": "PASSED",
    "TestAssetsConfiguratorMixin.test_override_asset_directory_with_absfile": "PASSED",
    "TestAssetsConfiguratorMixin.test_override_asset_directory_with_file": "PASSED",
    "TestAssetsConfiguratorMixin.test_override_asset_file_with_absdirectory": "PASSED",
    "TestAssetsConfiguratorMixin.test_override_asset_file_with_absfile": "PASSED",
    "TestAssetsConfiguratorMixin.test_override_asset_file_with_directory": "PASSED",
    "TestAssetsConfiguratorMixin.test_override_asset_file_with_missing_abspath": "PASSED",
    "TestAssetsConfiguratorMixin.test_override_asset_file_with_package": "PASSED",
    "TestAssetsConfiguratorMixin.test_override_asset_package_with_absdirectory": "PASSED",
    "TestAssetsConfiguratorMixin.test_override_asset_samename": "PASSED",
    "TestOverrideProvider.test_get_resource_filename_override_returns_value": "PASSED",
    "TestOverrideProvider.test_get_resource_stream_no_overrides": "PASSED",
    "TestOverrideProvider.test_get_resource_stream_override_returns_None": "PASSED",
    "TestOverrideProvider.test_get_resource_stream_override_returns_value": "PASSED",
    "TestOverrideProvider.test_get_resource_string_no_overrides": "PASSED",
    "TestOverrideProvider.test_get_resource_string_override_returns_None": "PASSED",
    "TestOverrideProvider.test_get_resource_string_override_returns_value": "PASSED",
    "TestOverrideProvider.test_has_resource_no_overrides": "PASSED",
    "TestOverrideProvider.test_has_resource_override_returns_None": "PASSED",
    "TestOverrideProvider.test_has_resource_override_returns_True": "PASSED",
    "TestOverrideProvider.test_resource_isdir_no_overrides": "PASSED",
    "TestOverrideProvider.test_resource_isdir_override_returns_False": "PASSED",
    "TestOverrideProvider.test_resource_isdir_override_returns_None": "PASSED",
    "TestOverrideProvider.test_resource_listdir_no_overrides": "PASSED",
    "TestOverrideProvider.test_resource_listdir_override_returns_None": "PASSED",
    "TestOverrideProvider.test_resource_listdir_override_returns_values": "PASSED",
    "TestPackageOverrides.test_class_conforms_to_IPEP302Loader": "PASSED",
    "TestPackageOverrides.test_class_conforms_to_IPackageOverrides": "PASSED",
    "TestPackageOverrides.test_ctor_package_already_has_loader_of_different_type": "PASSED",
    "TestPackageOverrides.test_ctor_package_already_has_loader_of_same_type": "PASSED",
    "TestPackageOverrides.test_ctor_registers_loader_type": "PASSED",
    "TestPackageOverrides.test_ctor_sets_loader": "PASSED",
    "TestPackageOverrides.test_ctor_sets_local_state": "PASSED",
    "TestPackageOverrides.test_filtered_sources": "PASSED",
    "TestPackageOverrides.test_get_code_pkg_has___loader__": "PASSED",
    "TestPackageOverrides.test_get_code_pkg_has_no___loader__": "PASSED",
    "TestPackageOverrides.test_get_data_pkg_has___loader__": "PASSED",
    "TestPackageOverrides.test_get_data_pkg_has_no___loader__": "PASSED",
    "TestPackageOverrides.test_get_filename": "PASSED",
    "TestPackageOverrides.test_get_filename_file_doesnt_exist": "PASSED",
    "TestPackageOverrides.test_get_source_pkg_has___loader__": "PASSED",
    "TestPackageOverrides.test_get_source_pkg_has_no___loader__": "PASSED",
    "TestPackageOverrides.test_get_stream": "PASSED",
    "TestPackageOverrides.test_get_stream_file_doesnt_exist": "PASSED",
    "TestPackageOverrides.test_get_string": "PASSED",
    "TestPackageOverrides.test_get_string_file_doesnt_exist": "PASSED",
    "TestPackageOverrides.test_has_resource": "PASSED",
    "TestPackageOverrides.test_has_resource_file_doesnt_exist": "PASSED",
    "TestPackageOverrides.test_insert_directory": "PASSED",
    "TestPackageOverrides.test_insert_emptystring": "PASSED",
    "TestPackageOverrides.test_insert_file": "PASSED",
    "TestPackageOverrides.test_instance_conforms_to_IPEP302Loader": "PASSED",
    "TestPackageOverrides.test_instance_conforms_to_IPackageOverrides": "PASSED",
    "TestPackageOverrides.test_is_package_pkg_has___loader__": "PASSED",
    "TestPackageOverrides.test_is_package_pkg_has_no___loader__": "PASSED",
    "TestPackageOverrides.test_isdir_doesnt_exist": "PASSED",
    "TestPackageOverrides.test_isdir_false": "PASSED",
    "TestPackageOverrides.test_isdir_true": "PASSED",
    "TestPackageOverrides.test_listdir": "PASSED",
    "TestPackageOverrides.test_listdir_doesnt_exist": "PASSED",
    "TestPackageAssetSource.test_exists": "PASSED",
    "TestPackageAssetSource.test_exists_file_doesnt_exist": "PASSED",
    "TestPackageAssetSource.test_exists_with_prefix": "PASSED",
    "TestPackageAssetSource.test_get_filename_file_doesnt_exist": "PASSED",
    "TestPackageAssetSource.test_get_stream": "PASSED",
    "TestPackageAssetSource.test_get_stream_file_doesnt_exist": "PASSED",
    "TestPackageAssetSource.test_get_stream_with_prefix": "PASSED",
    "TestPackageAssetSource.test_get_string": "PASSED",
    "TestPackageAssetSource.test_get_string_file_doesnt_exist": "PASSED",
    "TestPackageAssetSource.test_get_string_with_prefix": "PASSED",
    "TestPackageAssetSource.test_isdir_doesnt_exist": "PASSED",
    "TestPackageAssetSource.test_isdir_false": "PASSED",
    "TestPackageAssetSource.test_isdir_true": "PASSED",
    "TestPackageAssetSource.test_listdir": "PASSED",
    "TestPackageAssetSource.test_listdir_doesnt_exist": "PASSED",
    "TestFSAssetSource.test_exists": "PASSED",
    "TestFSAssetSource.test_exists_file_doesnt_exist": "PASSED",
    "TestFSAssetSource.test_exists_with_prefix": "PASSED",
    "TestFSAssetSource.test_get_filename": "PASSED",
    "TestFSAssetSource.test_get_filename_file_doesnt_exist": "PASSED",
    "TestFSAssetSource.test_get_filename_with_prefix": "PASSED",
    "TestFSAssetSource.test_get_stream": "PASSED",
    "TestFSAssetSource.test_get_stream_file_doesnt_exist": "PASSED",
    "TestFSAssetSource.test_get_stream_with_prefix": "PASSED",
    "TestFSAssetSource.test_get_string": "PASSED",
    "TestFSAssetSource.test_get_string_file_doesnt_exist": "PASSED",
    "TestFSAssetSource.test_get_string_with_prefix": "PASSED",
    "TestFSAssetSource.test_isdir_doesnt_exist": "PASSED",
    "TestFSAssetSource.test_isdir_false": "PASSED",
    "TestFSAssetSource.test_isdir_true": "PASSED",
    "TestFSAssetSource.test_listdir": "PASSED",
    "TestFSAssetSource.test_listdir_doesnt_exist": "PASSED",
    "TestDirectoryOverride.test_it_match": "PASSED",
    "TestDirectoryOverride.test_it_no_match": "PASSED",
    "TestFileOverride.test_it_match": "PASSED",
    "TestFileOverride.test_it_no_match": "PASSED",
    "TestFactoriesMixin.test_add_request_method_with_None_callable": "PASSED",
    "TestFactoriesMixin.test_add_request_method_with_None_callable_and_no_name": "PASSED",
    "TestFactoriesMixin.test_add_request_method_with_None_callable_conflict": "PASSED",
    "TestFactoriesMixin.test_add_request_method_with_callable": "PASSED",
    "TestFactoriesMixin.test_add_request_method_with_text_type_name": "PASSED",
    "TestFactoriesMixin.test_add_request_method_with_unnamed_callable": "PASSED",
    "TestFactoriesMixin.test_set_execution_policy": "PASSED",
    "TestFactoriesMixin.test_set_execution_policy_to_None": "PASSED",
    "TestFactoriesMixin.test_set_multiple_request_methods_conflict": "PASSED",
    "TestFactoriesMixin.test_set_request_factory": "PASSED",
    "TestFactoriesMixin.test_set_request_factory_dottedname": "PASSED",
    "TestFactoriesMixin.test_set_response_factory": "PASSED",
    "TestFactoriesMixin.test_set_response_factory_dottedname": "PASSED",
    "TestFactoriesMixin.test_set_root_factory": "PASSED",
    "TestFactoriesMixin.test_set_root_factory_as_None": "PASSED",
    "TestFactoriesMixin.test_set_root_factory_dottedname": "PASSED",
    "TestFactoriesMixin.test_set_session_factory": "PASSED",
    "TestFactoriesMixin.test_set_session_factory_dottedname": "PASSED",
    "TestDeprecatedFactoriesMixinMethods.test_set_multiple_request_properties": "PASSED",
    "TestDeprecatedFactoriesMixinMethods.test_set_multiple_request_properties_conflict": "PASSED",
    "TestDeprecatedFactoriesMixinMethods.test_set_request_property_with_callable": "PASSED",
    "TestDeprecatedFactoriesMixinMethods.test_set_request_property_with_property": "PASSED",
    "TestDeprecatedFactoriesMixinMethods.test_set_request_property_with_unnamed_callable": "PASSED",
    "TestI18NConfiguratorMixin.test_add_translation_dirs_invalid_kwargs": "PASSED",
    "TestI18NConfiguratorMixin.test_add_translation_dirs_missing_dir": "PASSED",
    "TestI18NConfiguratorMixin.test_add_translation_dirs_no_specs": "PASSED",
    "TestI18NConfiguratorMixin.test_set_locale_negotiator": "PASSED",
    "TestI18NConfiguratorMixin.test_set_locale_negotiator_dottedname": "PASSED",
    "ConfiguratorTests.test___getattr__matches": "PASSED",
    "ConfiguratorTests.test___getattr__matches_no_action_wrap": "PASSED",
    "ConfiguratorTests.test___getattr__missing_when_directives_dont_exist": "PASSED",
    "ConfiguratorTests.test___getattr__missing_when_directives_exist": "PASSED",
    "ConfiguratorTests.test__fix_registry_adds__lock": "PASSED",
    "ConfiguratorTests.test__fix_registry_adds_clear_view_lookup_cache": "PASSED",
    "ConfiguratorTests.test__fix_registry_has_listeners": "PASSED",
    "ConfiguratorTests.test__fix_registry_notify": "PASSED",
    "ConfiguratorTests.test__fix_registry_queryAdapterOrSelf": "PASSED",
    "ConfiguratorTests.test__fix_registry_registerSelfAdapter": "PASSED",
    "ConfiguratorTests.test_absolute_asset_spec_already_absolute": "PASSED",
    "ConfiguratorTests.test_absolute_asset_spec_notastring": "PASSED",
    "ConfiguratorTests.test_absolute_asset_spec_relative": "PASSED",
    "ConfiguratorTests.test_action_autocommit_with_introspectables": "PASSED",
    "ConfiguratorTests.test_action_autocommit_with_introspectables_introspection_off": "PASSED",
    "ConfiguratorTests.test_action_branching_kw_is_None": "PASSED",
    "ConfiguratorTests.test_action_branching_kw_is_not_None": "PASSED",
    "ConfiguratorTests.test_action_branching_nonautocommit_with_config_info": "PASSED",
    "ConfiguratorTests.test_action_branching_nonautocommit_with_introspectables": "PASSED",
    "ConfiguratorTests.test_action_branching_nonautocommit_without_config_info": "PASSED",
    "ConfiguratorTests.test_action_nonautocommit_with_introspectables_introspection_off": "PASSED",
    "ConfiguratorTests.test_autocommit_no_conflicts": "PASSED",
    "ConfiguratorTests.test_begin": "PASSED",
    "ConfiguratorTests.test_begin_does_not_propagate_request_for_diff_registry": "PASSED",
    "ConfiguratorTests.test_begin_overrides_request": "PASSED",
    "ConfiguratorTests.test_begin_propagates_request_for_same_registry": "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_context_manager": "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_threadlocals_active": "PASSED",
    "ConfiguratorTests.test_include_with_dotted_name": "PASSED",
    "ConfiguratorTests.test_include_with_missing_source_file": "PASSED",
    "ConfiguratorTests.test_include_with_module_defaults_to_includeme": "PASSED",
    "ConfiguratorTests.test_include_with_module_defaults_to_includeme_missing": "PASSED",
    "ConfiguratorTests.test_include_with_nested_route_prefix": "PASSED",
    "ConfiguratorTests.test_include_with_python_callable": "PASSED",
    "ConfiguratorTests.test_include_with_route_prefix": "PASSED",
    "ConfiguratorTests.test_introspector_decorator": "PASSED",
    "ConfiguratorTests.test_make_wsgi_app": "PASSED",
    "ConfiguratorTests.test_maybe_dotted_notstring_success": "PASSED",
    "ConfiguratorTests.test_maybe_dotted_string_fail": "PASSED",
    "ConfiguratorTests.test_maybe_dotted_string_success": "PASSED",
    "ConfiguratorTests.test_scan_integration": "PASSED",
    "ConfiguratorTests.test_scan_integration_dottedname_package": "PASSED",
    "ConfiguratorTests.test_scan_integration_with_extra_kw": "PASSED",
    "ConfiguratorTests.test_scan_integration_with_ignore": "PASSED",
    "ConfiguratorTests.test_scan_integration_with_onerror": "PASSED",
    "ConfiguratorTests.test_setup_registry_alternate_renderers": "PASSED",
    "ConfiguratorTests.test_setup_registry_authentication_policy": "PASSED",
    "ConfiguratorTests.test_setup_registry_authentication_policy_dottedname": "PASSED",
    "ConfiguratorTests.test_setup_registry_authorization_policy_dottedname": "PASSED",
    "ConfiguratorTests.test_setup_registry_authorization_policy_only": "PASSED",
    "ConfiguratorTests.test_setup_registry_calls_fix_registry": "PASSED",
    "ConfiguratorTests.test_setup_registry_custom_settings": "PASSED",
    "ConfiguratorTests.test_setup_registry_debug_logger_name": "PASSED",
    "ConfiguratorTests.test_setup_registry_debug_logger_non_None": "PASSED",
    "ConfiguratorTests.test_setup_registry_default_permission": "PASSED",
    "ConfiguratorTests.test_setup_registry_dottedname_root_factory": "PASSED",
    "ConfiguratorTests.test_setup_registry_explicit_notfound_trumps_iexceptionresponse": "PASSED",
    "ConfiguratorTests.test_setup_registry_includes": "PASSED",
    "ConfiguratorTests.test_setup_registry_includes_spaces": "PASSED",
    "ConfiguratorTests.test_setup_registry_locale_negotiator": "PASSED",
    "ConfiguratorTests.test_setup_registry_locale_negotiator_dottedname": "PASSED",
    "ConfiguratorTests.test_setup_registry_no_default_root_factory": "PASSED",
    "ConfiguratorTests.test_setup_registry_registers_default_exceptionresponse_views": "PASSED",
    "ConfiguratorTests.test_setup_registry_registers_default_view_predicates": "PASSED",
    "ConfiguratorTests.test_setup_registry_registers_default_webob_iresponse_adapter": "PASSED",
    "ConfiguratorTests.test_setup_registry_request_factory": "PASSED",
    "ConfiguratorTests.test_setup_registry_request_factory_dottedname": "PASSED",
    "ConfiguratorTests.test_setup_registry_response_factory": "PASSED",
    "ConfiguratorTests.test_setup_registry_tweens": "PASSED",
    "ConfiguratorTests.test_unhook_zca": "PASSED",
    "ConfiguratorTests.test_with_package": "PASSED",
    "ConfiguratorTests.test_with_package_module": "PASSED",
    "ConfiguratorTests.test_with_package_package": "PASSED",
    "TestConfigurator_add_directive.test_directive_persists_across_configurator_creations": "PASSED",
    "TestConfigurator_add_directive.test_extend_action_method_successful": "PASSED",
    "TestConfigurator_add_directive.test_extend_same_name_doesnt_conflict": "PASSED",
    "TestConfigurator__add_predicate.test_factory_as_object": "PASSED",
    "TestActionState.test_action_simple": "PASSED",
    "TestActionState.test_action_with_includepath": "PASSED",
    "TestActionState.test_action_with_includepath_and_info": "PASSED",
    "TestActionState.test_action_with_info": "PASSED",
    "TestActionState.test_action_with_introspectables": "PASSED",
    "TestActionState.test_action_with_order": "PASSED",
    "TestActionState.test_execute_actions_dicts": "PASSED",
    "TestActionState.test_execute_actions_error": "PASSED",
    "TestActionState.test_execute_actions_tuples": "PASSED",
    "TestActionState.test_execute_actions_with_introspectable_no_callable": "PASSED",
    "TestActionState.test_execute_actions_with_introspectables": "PASSED",
    "TestActionState.test_executing_conflicting_action_across_orders": "PASSED",
    "TestActionState.test_executing_conflicting_action_across_reentrant_orders": "PASSED",
    "TestActionState.test_it": "PASSED",
    "TestActionState.test_processSpec": "PASSED",
    "TestActionState.test_reentrant_action": "PASSED",
    "TestActionState.test_reentrant_action_error": "PASSED",
    "TestActionState.test_reentrant_action_with_deferred_discriminator": "PASSED",
    "TestActionState.test_reentrant_action_without_clear": "PASSED",
    "Test_reentrant_action_functional.test_deferred_discriminator": "PASSED",
    "Test_reentrant_action_functional.test_functional": "PASSED",
    "Test_resolveConflicts.test_conflicts_across_orders": "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",
    "Test_resolveConflicts.test_override_success_across_orders": "PASSED",
    "TestGlobalRegistriesIntegration.test_global_registries": "PASSED",
    "TestGlobalRegistriesIntegration.test_global_registries_empty": "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_changing_set_default_csrf_options": "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_csrf_options": "PASSED",
    "ConfiguratorSecurityMethodsTests.test_set_default_permission": "PASSED",
    "TestSettingsConfiguratorMixin.test__set_settings_as_None": "PASSED",
    "TestSettingsConfiguratorMixin.test__set_settings_as_dictwithvalues": "PASSED",
    "TestSettingsConfiguratorMixin.test__set_settings_does_not_uses_original_dict": "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",
    "TestSettingsConfiguratorMixin.test_settings_parameter_dict_is_never_updated": "PASSED",
    "TestSettings.test_csrf_trusted_origins": "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_noargs": "PASSED",
    "TestSettings.test_originals_kept": "PASSED",
    "TestSettings.test_prevent_cachebust": "PASSED",
    "TestSettings.test_prevent_http_cache": "PASSED",
    "TestSettings.test_reload_all": "PASSED",
    "TestSettings.test_reload_assets": "PASSED",
    "TestSettings.test_reload_resources": "PASSED",
    "TestSettings.test_reload_templates": "PASSED",
    "TestingConfiguratorMixinTests.test_testing_add_renderer": "PASSED",
    "TestingConfiguratorMixinTests.test_testing_add_renderer_explicitrenderer": "PASSED",
    "TestingConfiguratorMixinTests.test_testing_add_renderer_twice": "PASSED",
    "TestingConfiguratorMixinTests.test_testing_add_subscriber_defaults": "PASSED",
    "TestingConfiguratorMixinTests.test_testing_add_subscriber_dottedname": "PASSED",
    "TestingConfiguratorMixinTests.test_testing_add_subscriber_multiple": "PASSED",
    "TestingConfiguratorMixinTests.test_testing_add_subscriber_single": "PASSED",
    "TestingConfiguratorMixinTests.test_testing_add_template": "PASSED",
    "TestingConfiguratorMixinTests.test_testing_resources": "PASSED",
    "TestingConfiguratorMixinTests.test_testing_securitypolicy": "PASSED",
    "TestingConfiguratorMixinTests.test_testing_securitypolicy_forget_result": "PASSED",
    "TestingConfiguratorMixinTests.test_testing_securitypolicy_remember_result": "PASSED",
    "TestTweensConfiguratorMixin.test_add_tween_dottedname": "PASSED",
    "TestTweensConfiguratorMixin.test_add_tween_instance": "PASSED",
    "TestTweensConfiguratorMixin.test_add_tween_name_ingress": "PASSED",
    "TestTweensConfiguratorMixin.test_add_tween_name_main": "PASSED",
    "TestTweensConfiguratorMixin.test_add_tween_over_ingress": "PASSED",
    "TestTweensConfiguratorMixin.test_add_tween_over_ingress_iterable": "PASSED",
    "TestTweensConfiguratorMixin.test_add_tween_under_main": "PASSED",
    "TestTweensConfiguratorMixin.test_add_tween_under_main_iterable": "PASSED",
    "TestTweensConfiguratorMixin.test_add_tween_unsuitable": "PASSED",
    "TestTweensConfiguratorMixin.test_add_tweens_conflict": "PASSED",
    "TestTweensConfiguratorMixin.test_add_tweens_names_distinct": "PASSED",
    "TestTweensConfiguratorMixin.test_add_tweens_names_with_over_nonstringoriter": "PASSED",
    "TestTweensConfiguratorMixin.test_add_tweens_names_with_under_nonstringoriter": "PASSED",
    "TestTweensConfiguratorMixin.test_add_tweens_names_with_underover": "PASSED",
    "TestTweens.test___call___explicit": "PASSED",
    "TestTweens.test___call___implicit": "PASSED",
    "TestTweens.test_add_explicit": "PASSED",
    "TestTweens.test_add_implicit": "PASSED",
    "TestTweens.test_implicit_ordering_1": "PASSED",
    "TestTweens.test_implicit_ordering_2": "PASSED",
    "TestTweens.test_implicit_ordering_3": "PASSED",
    "TestTweens.test_implicit_ordering_4": "PASSED",
    "TestTweens.test_implicit_ordering_5": "PASSED",
    "TestTweens.test_implicit_ordering_conflict_direct": "PASSED",
    "TestTweens.test_implicit_ordering_conflict_indirect": "PASSED",
    "TestTweens.test_implicit_ordering_missing_over_and_under_partials": "PASSED",
    "TestTweens.test_implicit_ordering_missing_over_partial": "PASSED",
    "TestTweens.test_implicit_ordering_missing_over_partial_with_fallback": "PASSED",
    "TestTweens.test_implicit_ordering_missing_under_partial": "PASSED",
    "TestTweens.test_implicit_ordering_missing_under_partial_with_fallback": "PASSED",
    "TestTweens.test_implicit_ordering_with_missing_fallbacks": "PASSED",
    "TestTweens.test_implicit_ordering_with_multiple_matching_fallbacks": "PASSED",
    "TestTweens.test_implicit_ordering_with_partial_fallbacks": "PASSED",
    "TestActionInfo.test___str__": "PASSED",
    "TestActionInfo.test_class_conforms": "PASSED",
    "TestActionInfo.test_ctor": "PASSED",
    "TestActionInfo.test_instance_conforms": "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_close_matches": "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",
    "TestDeprecatedPredicates.test_it": "PASSED",
    "TestViewsConfigurationMixin.test_add_exception_view": "PASSED",
    "TestViewsConfigurationMixin.test_add_exception_view_disallows_exception_only": "PASSED",
    "TestViewsConfigurationMixin.test_add_exception_view_disallows_for_": "PASSED",
    "TestViewsConfigurationMixin.test_add_exception_view_disallows_name": "PASSED",
    "TestViewsConfigurationMixin.test_add_exception_view_disallows_permission": "PASSED",
    "TestViewsConfigurationMixin.test_add_exception_view_disallows_require_csrf": "PASSED",
    "TestViewsConfigurationMixin.test_add_exception_view_with_subclass": "PASSED",
    "TestViewsConfigurationMixin.test_add_exception_view_with_view_defaults": "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_name": "PASSED",
    "TestViewsConfigurationMixin.test_add_forbidden_view_disallows_permission": "PASSED",
    "TestViewsConfigurationMixin.test_add_forbidden_view_disallows_require_csrf": "PASSED",
    "TestViewsConfigurationMixin.test_add_forbidden_view_no_view_argument": "PASSED",
    "TestViewsConfigurationMixin.test_add_forbidden_view_with_renderer": "PASSED",
    "TestViewsConfigurationMixin.test_add_forbidden_view_with_view_defaults": "PASSED",
    "TestViewsConfigurationMixin.test_add_normal_and_exception_view_intr_derived_callable": "PASSED",
    "TestViewsConfigurationMixin.test_add_notfound_view": "PASSED",
    "TestViewsConfigurationMixin.test_add_notfound_view_allows_other_predicates": "PASSED",
    "TestViewsConfigurationMixin.test_add_notfound_view_append_slash": "PASSED",
    "TestViewsConfigurationMixin.test_add_notfound_view_append_slash_custom_response": "PASSED",
    "TestViewsConfigurationMixin.test_add_notfound_view_disallows_context": "PASSED",
    "TestViewsConfigurationMixin.test_add_notfound_view_disallows_for_": "PASSED",
    "TestViewsConfigurationMixin.test_add_notfound_view_disallows_name": "PASSED",
    "TestViewsConfigurationMixin.test_add_notfound_view_disallows_permission": "PASSED",
    "TestViewsConfigurationMixin.test_add_notfound_view_disallows_require_csrf": "PASSED",
    "TestViewsConfigurationMixin.test_add_notfound_view_no_view_argument": "PASSED",
    "TestViewsConfigurationMixin.test_add_notfound_view_with_renderer": "PASSED",
    "TestViewsConfigurationMixin.test_add_notfound_view_with_view_defaults": "PASSED",
    "TestViewsConfigurationMixin.test_add_static_view_absolute": "PASSED",
    "TestViewsConfigurationMixin.test_add_static_view_here_no_utility_registered": "PASSED",
    "TestViewsConfigurationMixin.test_add_static_view_package_relative": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_as_instance": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_as_instance_requestonly": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_as_instancemethod": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_as_instancemethod_requestonly": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_as_oldstyle_class": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_as_oldstyle_class_requestonly": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_class_method_no_attr": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_context_as_class": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_context_as_dottedname": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_context_as_iface": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_context_trumps_for": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_custom_more_preds_first_bests_fewer_preds_last": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_custom_predicate_bests_standard_predicate": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_default_phash_overrides_default_phash": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_default_phash_overrides_no_phash": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_exc_default_phash_overrides_default_phash": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_exc_default_phash_overrides_no_phash": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_exc_multiview_replaces_existing_securedview": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_exc_multiview_replaces_existing_view": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_exc_multiview_replaces_multiviews": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_exc_multiview_replaces_only_exc_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_only": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_exception_only_misconfiguration": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_exception_only_no_regular_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_check_csrf_predicates_match": "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_csrf_header": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_csrf_param": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_custom_predicates_match": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_custom_predicates_nomatch": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_decorator": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_decorator_tuple": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_default_permission_no_explicit_permission": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_default_renderer": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_function_callable": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_function_callable_requestonly": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_header_badregex": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_header_noval_match": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_header_noval_nomatch": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_header_val_match": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_header_val_missing": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_header_val_nomatch": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_http_cache": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_mapper": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_missing_csrf_header": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_name": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_name_unicode": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_no_default_permission_no_explicit_permission": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_nonexistant_route_name": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_path_info_badregex": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_path_info_match": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_path_info_nomatch": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_permission": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_request_method_false": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_request_method_get_implies_head": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_request_method_sequence_conflict": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_request_method_sequence_false": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_request_method_sequence_true": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_request_method_true": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_request_param_noval_false": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_request_param_noval_true": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_request_param_val_false": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_request_param_val_true": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_request_type": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_request_type_and_route_name": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_request_type_as_iface": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_request_type_as_noniface": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_route_name": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_route_name_exception": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_tmpl_renderer_factory_introspector_missing": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_tmpl_renderer_factory_no_renderer_factory": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_tmpl_renderer_factory_with_renderer_factory": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_view_config_and_view_defaults_conflicts": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_view_config_and_view_defaults_doesnt_conflict": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_view_defaults": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_view_defaults_viewname_is_dottedname_kwarg": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_view_defaults_viewname_is_dottedname_nonkwarg": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_xhr_false": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_xhr_true": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_wrapped_view_is_decorated": "PASSED",
    "TestViewsConfigurationMixin.test_add_views_with_accept_multiview_replaces_existing": "PASSED",
    "TestViewsConfigurationMixin.test_derive_view_dottedname": "PASSED",
    "TestViewsConfigurationMixin.test_derive_view_function": "PASSED",
    "TestViewsConfigurationMixin.test_derive_view_with_default_renderer_no_explicit_renderer": "PASSED",
    "TestViewsConfigurationMixin.test_derive_view_with_default_renderer_with_explicit_renderer": "PASSED",
    "TestViewsConfigurationMixin.test_set_view_mapper": "PASSED",
    "TestViewsConfigurationMixin.test_set_view_mapper_dottedname": "PASSED",
    "TestViewsConfigurationMixin.test_view_with_most_specific_predicate": "PASSED",
    "TestViewsConfigurationMixin.test_view_with_most_specific_predicate_with_mismatch": "PASSED",
    "Test_runtime_exc_view.test_call": "PASSED",
    "Test_runtime_exc_view.test_call_dispatches_on_exception": "PASSED",
    "Test_runtime_exc_view.test_permitted": "PASSED",
    "Test_runtime_exc_view.test_permitted_dispatches_on_exception": "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",
    "TestDefaultViewMapper.test__view_as_function_with_attr": "PASSED",
    "TestDefaultViewMapper.test_view_as_function_context_and_request": "PASSED",
    "TestDefaultViewMapper.test_view_as_function_requestonly": "PASSED",
    "TestDefaultViewMapper.test_view_as_function_requestonly_with_attr": "PASSED",
    "TestDefaultViewMapper.test_view_as_instance_context_and_request": "PASSED",
    "TestDefaultViewMapper.test_view_as_instance_context_and_request_and_attr": "PASSED",
    "TestDefaultViewMapper.test_view_as_instance_requestonly": "PASSED",
    "TestDefaultViewMapper.test_view_as_instance_requestonly_with_attr": "PASSED",
    "TestDefaultViewMapper.test_view_as_newstyle_class_context_and_request": "PASSED",
    "TestDefaultViewMapper.test_view_as_newstyle_class_context_and_request_with_attr": "PASSED",
    "TestDefaultViewMapper.test_view_as_newstyle_class_requestonly": "PASSED",
    "TestDefaultViewMapper.test_view_as_newstyle_class_requestonly_with_attr": "PASSED",
    "TestDefaultViewMapper.test_view_as_oldstyle_class_context_and_request": "PASSED",
    "TestDefaultViewMapper.test_view_as_oldstyle_class_context_and_request_with_attr": "PASSED",
    "TestDefaultViewMapper.test_view_as_oldstyle_class_requestonly": "PASSED",
    "TestDefaultViewMapper.test_view_as_oldstyle_class_requestonly_with_attr": "PASSED",
    "Test_preserve_view_attrs.test_it_different": "PASSED",
    "Test_preserve_view_attrs.test_it_different_with_existing_original_view": "PASSED",
    "Test_preserve_view_attrs.test_it_same": "PASSED",
    "Test_preserve_view_attrs.test_it_view_is_None": "PASSED",
    "TestStaticURLInfo.test_add_already_exists": "PASSED",
    "TestStaticURLInfo.test_add_cachebust_prevented": "PASSED",
    "TestStaticURLInfo.test_add_cachebuster": "PASSED",
    "TestStaticURLInfo.test_add_cachebuster_abspath": "PASSED",
    "TestStaticURLInfo.test_add_cachebuster_for_more_specific_path": "PASSED",
    "TestStaticURLInfo.test_add_cachebuster_overwrite": "PASSED",
    "TestStaticURLInfo.test_add_cachebuster_overwrite_explicit": "PASSED",
    "TestStaticURLInfo.test_add_package_root": "PASSED",
    "TestStaticURLInfo.test_add_url_noendslash": "PASSED",
    "TestStaticURLInfo.test_add_url_noscheme": "PASSED",
    "TestStaticURLInfo.test_add_url_withendslash": "PASSED",
    "TestStaticURLInfo.test_add_viewname": "PASSED",
    "TestStaticURLInfo.test_add_viewname_with_context": "PASSED",
    "TestStaticURLInfo.test_add_viewname_with_for_": "PASSED",
    "TestStaticURLInfo.test_add_viewname_with_permission": "PASSED",
    "TestStaticURLInfo.test_add_viewname_with_renderer": "PASSED",
    "TestStaticURLInfo.test_add_viewname_with_route_prefix": "PASSED",
    "TestStaticURLInfo.test_generate_missing": "PASSED",
    "TestStaticURLInfo.test_generate_quoting": "PASSED",
    "TestStaticURLInfo.test_generate_registration_miss": "PASSED",
    "TestStaticURLInfo.test_generate_route_url": "PASSED",
    "TestStaticURLInfo.test_generate_slash_in_name1": "PASSED",
    "TestStaticURLInfo.test_generate_slash_in_name2": "PASSED",
    "TestStaticURLInfo.test_generate_url_cachebust": "PASSED",
    "TestStaticURLInfo.test_generate_url_cachebust_abspath": "PASSED",
    "TestStaticURLInfo.test_generate_url_cachebust_nomatch": "PASSED",
    "TestStaticURLInfo.test_generate_url_quoted_remote": "PASSED",
    "TestStaticURLInfo.test_generate_url_unquoted_local": "PASSED",
    "TestStaticURLInfo.test_generate_url_with_custom_anchor": "PASSED",
    "TestStaticURLInfo.test_generate_url_with_custom_query": "PASSED",
    "TestStaticURLInfo.test_verifyClass": "PASSED",
    "TestStaticURLInfo.test_verifyObject": "PASSED",
    "Test_view_description.test_with_text": "PASSED",
    "Test_viewdefaults.test_dunder_attrs_copied": "PASSED",
    "TestParseVars.test_parse_vars_bad": "PASSED",
    "TestParseVars.test_parse_vars_good": "PASSED",
    "TestPCreateCommand.test_confirm_override_conflicting_name": "PASSED",
    "TestPCreateCommand.test_force_override_conflicting_name": "PASSED",
    "TestPCreateCommand.test_force_override_site_name": "PASSED",
    "TestPCreateCommand.test_known_scaffold_absolute_path": "PASSED",
    "TestPCreateCommand.test_known_scaffold_multiple_rendered": "PASSED",
    "TestPCreateCommand.test_known_scaffold_single_rendered": "PASSED",
    "TestPCreateCommand.test_known_scaffold_with_path_as_project_target_rendered": "PASSED",
    "TestPCreateCommand.test_no_project_name": "PASSED",
    "TestPCreateCommand.test_run_no_scaffold_name": "PASSED",
    "TestPCreateCommand.test_run_no_scaffold_no_args": "PASSED",
    "TestPCreateCommand.test_run_show_scaffolds_exist": "PASSED",
    "TestPCreateCommand.test_run_show_scaffolds_none_exist": "PASSED",
    "TestPCreateCommand.test_scaffold_with_dev_pyramid_long_version": "PASSED",
    "TestPCreateCommand.test_scaffold_with_dev_pyramid_version": "PASSED",
    "TestPCreateCommand.test_scaffold_with_hyphen_in_project_name": "PASSED",
    "TestPCreateCommand.test_scaffold_with_package_name": "PASSED",
    "TestPCreateCommand.test_scaffold_with_prod_pyramid_long_version": "PASSED",
    "TestPCreateCommand.test_scaffold_with_prod_pyramid_unparsable_version": "PASSED",
    "TestPCreateCommand.test_scaffold_with_prod_pyramid_version": "PASSED",
    "TestPCreateCommand.test_unknown_scaffold_name": "PASSED",
    "Test_main.test_it": "PASSED",
    "TestPDistReportCommand.test_no_dists": "PASSED",
    "TestPDistReportCommand.test_with_dists": "PASSED",
    "TestPRequestCommand.test_command_display_headers": "PASSED",
    "TestPRequestCommand.test_command_has_bad_config_header": "PASSED",
    "TestPRequestCommand.test_command_has_content_type_header_var": "PASSED",
    "TestPRequestCommand.test_command_has_good_header_var": "PASSED",
    "TestPRequestCommand.test_command_has_multiple_header_vars": "PASSED",
    "TestPRequestCommand.test_command_method_configures_logging": "PASSED",
    "TestPRequestCommand.test_command_method_get": "PASSED",
    "TestPRequestCommand.test_command_method_options": "PASSED",
    "TestPRequestCommand.test_command_method_patch": "PASSED",
    "TestPRequestCommand.test_command_method_post": "PASSED",
    "TestPRequestCommand.test_command_method_propfind": "PASSED",
    "TestPRequestCommand.test_command_method_put": "PASSED",
    "TestPRequestCommand.test_command_not_enough_args": "PASSED",
    "TestPRequestCommand.test_command_path_doesnt_start_with_slash": "PASSED",
    "TestPRequestCommand.test_command_response_has_no_charset": "PASSED",
    "TestPRequestCommand.test_command_two_args": "PASSED",
    "TestPRequestCommand.test_command_w_basic_auth": "PASSED",
    "TestPRequestCommand.test_command_with_query_string": "PASSED",
    "TestPRoutesCommand.test__get_mapper": "PASSED",
    "TestPRoutesCommand.test_bad_args": "PASSED",
    "TestPRoutesCommand.test_bad_format": "PASSED",
    "TestPRoutesCommand.test_class_view": "PASSED",
    "TestPRoutesCommand.test_config_format_ini_commas": "PASSED",
    "TestPRoutesCommand.test_config_format_ini_newlines": "PASSED",
    "TestPRoutesCommand.test_config_format_ini_spaces": "PASSED",
    "TestPRoutesCommand.test_good_args": "PASSED",
    "TestPRoutesCommand.test_good_format": "PASSED",
    "TestPRoutesCommand.test_no_mapper": "PASSED",
    "TestPRoutesCommand.test_no_routes": "PASSED",
    "TestPRoutesCommand.test_route_as_wsgiapp": "PASSED",
    "TestPRoutesCommand.test_route_no_view": "PASSED",
    "TestPRoutesCommand.test_route_with_no_slash_prefix": "PASSED",
    "TestPRoutesCommand.test_single_route_multiview_registered": "PASSED",
    "TestPRoutesCommand.test_single_route_no_route_registered": "PASSED",
    "TestPRoutesCommand.test_single_route_no_views_registered": "PASSED",
    "TestPRoutesCommand.test_single_route_one_view_registered_with_factory": "PASSED",
    "TestPRoutesCommand.test_static_routes_included_in_list": "PASSED",
    "TestPServeCommand.test_config_file_finds_open_url": "PASSED",
    "TestPServeCommand.test_guess_server_url": "PASSED",
    "TestPServeCommand.test_parse_vars_bad": "PASSED",
    "TestPServeCommand.test_parse_vars_good": "PASSED",
    "TestPServeCommand.test_reload_call_hupper_with_correct_args": "PASSED",
    "TestPServeCommand.test_run_no_args": "PASSED",
    "TestPShellCommand.test_command_custom_section_override": "PASSED",
    "TestPShellCommand.test_command_default_shell_option": "PASSED",
    "TestPShellCommand.test_command_errors_with_unknown_shell": "PASSED",
    "TestPShellCommand.test_command_loads_check_variable_override_order": "PASSED",
    "TestPShellCommand.test_command_loads_custom_items": "PASSED",
    "TestPShellCommand.test_command_loads_default_shell": "PASSED",
    "TestPShellCommand.test_command_loads_ipython": "PASSED",
    "TestPShellCommand.test_command_loads_pythonstartup": "PASSED",
    "TestPShellCommand.test_command_loads_setup_from_options": "PASSED",
    "TestPShellCommand.test_command_setup": "PASSED",
    "TestPShellCommand.test_command_setup_generator": "PASSED",
    "TestPShellCommand.test_list_shells": "PASSED",
    "TestPShellCommand.test_shell_entry_points": "PASSED",
    "TestPShellCommand.test_shell_ordering": "PASSED",
    "TestPShellCommand.test_shell_override": "PASSED",
    "Test_python_shell_runner.test_it": "PASSED",
    "TestPTweensCommand.test__get_tweens": "PASSED",
    "TestPTweensCommand.test_command_implicit_and_explicit_tweens": "PASSED",
    "TestPTweensCommand.test_command_implicit_tweens_only": "PASSED",
    "TestPTweensCommand.test_command_no_tweens": "PASSED",
    "TestPViewsCommand.test__find_multi_routes_all_match": "PASSED",
    "TestPViewsCommand.test__find_multi_routes_none_match": "PASSED",
    "TestPViewsCommand.test__find_multi_routes_some_match": "PASSED",
    "TestPViewsCommand.test__find_view_no_match": "PASSED",
    "TestPViewsCommand.test__find_view_no_match_multiview_registered": "PASSED",
    "TestPViewsCommand.test__find_view_route_multiview": "PASSED",
    "TestPViewsCommand.test__find_view_route_multiview_no_view_registered": "PASSED",
    "TestPViewsCommand.test__find_view_route_no_multiview": "PASSED",
    "TestPViewsCommand.test__find_view_traversal": "PASSED",
    "TestPViewsCommand.test__find_view_traversal_multiview": "PASSED",
    "TestPViewsCommand.test_views_command_multi_view_nested": "PASSED",
    "TestPViewsCommand.test_views_command_multiview": "PASSED",
    "TestPViewsCommand.test_views_command_multiview_with_permission": "PASSED",
    "TestPViewsCommand.test_views_command_multiview_with_predicates": "PASSED",
    "TestPViewsCommand.test_views_command_not_found": "PASSED",
    "TestPViewsCommand.test_views_command_not_found_url_starts_without_slash": "PASSED",
    "TestPViewsCommand.test_views_command_single_view_route": "PASSED",
    "TestPViewsCommand.test_views_command_single_view_route_with_route_predicates": "PASSED",
    "TestPViewsCommand.test_views_command_single_view_traversal": "PASSED",
    "TestPViewsCommand.test_views_command_single_view_traversal_with_permission": "PASSED",
    "TestPViewsCommand.test_views_command_single_view_traversal_with_predicates": "PASSED",
    "TestPickleSerializer.test_loads": "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",
    "TestAssetsConfiguratorMixin.test_override_asset_directory_with_directory": "FAILED",
    "TestAssetsConfiguratorMixin.test_override_asset_directory_with_package": "FAILED",
    "TestAssetsConfiguratorMixin.test_override_asset_file_with_file": "FAILED",
    "TestAssetsConfiguratorMixin.test_override_asset_package_with_directory": "FAILED",
    "TestAssetsConfiguratorMixin.test_override_asset_package_with_package": "FAILED",
    "TestOverrideProvider.test_get_resource_filename_no_overrides": "FAILED",
    "TestOverrideProvider.test_get_resource_filename_override_returns_None": "FAILED",
    "TestPackageAssetSource.test_get_filename": "FAILED",
    "TestPackageAssetSource.test_get_filename_with_prefix": "FAILED",
    "TestI18NConfiguratorMixin.test_add_translation_dirs_abspath": "FAILED",
    "TestI18NConfiguratorMixin.test_add_translation_dirs_asset_spec": "FAILED",
    "TestI18NConfiguratorMixin.test_add_translation_dirs_asset_spec_existing_translation_dirs": "FAILED",
    "TestI18NConfiguratorMixin.test_add_translation_dirs_doesnt_use_override_w_autocommit": "FAILED",
    "TestI18NConfiguratorMixin.test_add_translation_dirs_multiple_specs": "FAILED",
    "TestI18NConfiguratorMixin.test_add_translation_dirs_multiple_specs_multiple_calls": "FAILED",
    "TestI18NConfiguratorMixin.test_add_translation_dirs_override_multiple_specs_multiple_calls": "FAILED",
    "TestI18NConfiguratorMixin.test_add_translation_dirs_uses_override_out_of_order": "FAILED",
    "TestI18NConfiguratorMixin.test_add_translation_dirs_uses_override_w_autocommit": "FAILED",
    "ConfiguratorTests.test_ctor_no_registry": "FAILED",
    "ConfiguratorTests.test_ctor_noreg_debug_logger_None_default": "FAILED",
    "ConfiguratorTests.test_include_constant_root_package": "FAILED",
    "ConfiguratorTests.test_scan_integration_conflict": "FAILED",
    "ConfiguratorTests.test_setup_registry_debug_logger_None_default": "FAILED",
    "TestConfigurator_add_directive.test_add_directive_with_custom_callable": "FAILED",
    "TestConfigurator_add_directive.test_add_directive_with_partial": "FAILED",
    "TestConfigurator_add_directive.test_extend_with_dotted_name": "FAILED",
    "TestConfigurator_add_directive.test_extend_with_python_callable": "FAILED",
    "TestConfigurator__add_predicate.test_factory_as_dotted_name": "FAILED",
    "TestViewsConfigurationMixin.test_add_static_view_package_here_relative": "FAILED",
    "TestViewsConfigurationMixin.test_add_view_with_template_renderer": "FAILED",
    "TestViewsConfigurationMixin.test_add_view_with_template_renderer_no_callable": "FAILED",
    "TestStaticURLInfo.test_generate_url_cachebust_with_overrides": "FAILED",
    "Test_view_description.test_without_text": "FAILED",
    "TestPRoutesCommand.test_one_route_all_methods_view_only_post": "FAILED",
    "TestPRoutesCommand.test_one_route_only_post_view_all_methods": "FAILED",
    "TestPRoutesCommand.test_one_route_only_post_view_post_and_get": "FAILED",
    "TestPRoutesCommand.test_one_route_with_long_name_one_view_registered": "FAILED",
    "TestPRoutesCommand.test_route_is_get_view_request_method_not_post": "FAILED",
    "TestPRoutesCommand.test_route_request_method_mismatch": "FAILED",
    "TestPRoutesCommand.test_route_static_views": "FAILED",
    "TestPRoutesCommand.test_single_route_one_view_registered": "FAILED",
    "TestPRoutesCommand.test_view_glob": "FAILED",
    "TestPRoutesCommand.test_view_request_method_not_post": "FAILED",
    "TestPServeCommand.test_config_file_finds_watch_files": "FAILED",
    "TestPViewsCommand.test_views_command_single_view_function_traversal": "FAILED"
}
diff --git a/pyramid/session.py b/pyramid/session.py
index d05ac66eb..97039a404 100644
--- a/pyramid/session.py
+++ b/pyramid/session.py
@@ -121,7 +121,11 @@ class PickleSerializer(object):
 
     def loads(self, bstruct):
         """Accept bytes and return a Python object."""
-        return pickle.loads(bstruct)
+        try:
+            return pickle.loads(bstruct)
+        # at least ValueError, AttributeError, ImportError but more to be safe
+        except Exception:
+            raise ValueError
 
     def dumps(self, appstruct):
         """Accept a Python object and return bytes."""

{"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    PY2,\n    text_,\n    bytes_,\n    native_,\n    )\nfrom pyramid.csrf import (\n    check_csrf_origin,\n    check_csrf_token,\n)\n\nfrom pyramid.interfaces import ISession\nfrom pyramid.util import strings_differ\n\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    try:\n        # bw-compat with pyramid <= 1.5b1 where latin1 is the default\n        secret = bytes_(secret)\n    except UnicodeEncodeError:\n        secret = bytes_(secret, 'utf-8')\n    sig = hmac.new(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    try:\n        # bw-compat with pyramid <= 1.5b1 where latin1 is the default\n        secret = bytes_(secret)\n    except UnicodeEncodeError:\n        secret = bytes_(secret, 'utf-8')\n    sig = bytes_(hmac.new(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\n\nclass PickleSerializer(object):\n    \"\"\" A serializer that uses the pickle protocol to dump Python\n    data to bytes.\n\n    This is the default serializer used by Pyramid.\n\n    ``protocol`` may be specified to control the version of pickle used.\n    Defaults to :attr:`pickle.HIGHEST_PROTOCOL`.\n\n    \"\"\"\n    def __init__(self, protocol=pickle.HIGHEST_PROTOCOL):\n        self.protocol = protocol\n\n    def loads(self, bstruct):\n        \"\"\"Accept bytes and return a Python object.\"\"\"\n        return pickle.loads(bstruct)\n\n    def dumps(self, appstruct):\n        \"\"\"Accept a Python object and return bytes.\"\"\"\n        return pickle.dumps(appstruct, self.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    samesite='Lax',\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    ``samesite``\n      The 'samesite' option of the session cookie. Set the value to ``None``\n      to turn off the samesite option.  Default: ``'Lax'``.\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    .. versionchanged: 1.10\n\n       Added the ``samesite`` option and made the default ``'Lax'``.\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 if max_age is None else int(max_age)\n        _cookie_path = path\n        _cookie_domain = domain\n        _cookie_secure = secure\n        _cookie_httponly = httponly\n        _cookie_samesite = samesite\n        _cookie_on_exception = set_on_exception\n        _timeout = timeout if timeout is None else int(timeout)\n        _reissue_time = reissue_time if reissue_time is None else int(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 PY2:\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                samesite=self._cookie_samesite,\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_samesite='Lax',\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_samesite``\n      The 'samesite' option of the session cookie. Set the value to ``None``\n      to turn off the samesite option.  Default: ``'Lax'``.\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    .. versionchanged: 1.10\n\n       Added the ``samesite`` option and made the default ``'Lax'``.\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        samesite=cookie_samesite,\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    samesite='Lax',\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 512 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    ``samesite``\n      The 'samesite' option of the session cookie. Set the value to ``None``\n      to turn off the samesite option.  Default: ``'Lax'``.\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    .. versionchanged: 1.10\n\n       Added the ``samesite`` option and made the default ``Lax``.\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        samesite=samesite,\n        timeout=timeout,\n        reissue_time=reissue_time,\n        set_on_exception=set_on_exception,\n    )\n\ncheck_csrf_origin = check_csrf_origin  # api\ndeprecated('check_csrf_origin',\n           'pyramid.session.check_csrf_origin is deprecated as of Pyramid '\n           '1.9. Use pyramid.csrf.check_csrf_origin instead.')\n\ncheck_csrf_token = check_csrf_token  # api\ndeprecated('check_csrf_token',\n           'pyramid.session.check_csrf_token is deprecated as of Pyramid '\n           '1.9. Use pyramid.csrf.check_csrf_token instead.')\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:** Unhandled Exceptions Raised When Loading Invalid Pickle Session Data

**Description:**

When loading session data that contains invalid or corrupted pickle data, unexpected exceptions such as `AttributeError` or `UnpicklingError` are raised. This can lead to application crashes or improper session handling.

**Example Buggy Code:**

```python
import pickle

def load_session(session_data):
    return pickle.loads(session_data)

# Example of invalid session data referencing a non-existent class
invalid_data = b'(i__main__\nFoo\np0\n(dp1\nb.'
load_session(invalid_data)
```

**Actual Behavior:**

Attempting to load the above `invalid_data` results in an error like:

```
AttributeError: Can't get attribute 'Foo' on <module 'pytest.__main__' ...>
```

Similarly, loading data that is not properly pickled raises:

```
_pickle.UnpicklingError: invalid load key, 'n'.
```

**Expected Behavior:**

The session loading process should handle invalid or corrupted pickle data gracefully, avoiding unexpected exceptions and ensuring the application remains stable. Instead of raising low-level errors, it should manage such scenarios appropriately, possibly by resetting the session or providing a controlled error message.

[/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,
    PY2,
    text_,
    bytes_,
    native_,
    )
from pyramid.csrf import (
    check_csrf_origin,
    check_csrf_token,
)

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

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)
    try:
        # bw-compat with pyramid <= 1.5b1 where latin1 is the default
        secret = bytes_(secret)
    except UnicodeEncodeError:
        secret = bytes_(secret, 'utf-8')
    sig = hmac.new(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)

    try:
        # bw-compat with pyramid <= 1.5b1 where latin1 is the default
        secret = bytes_(secret)
    except UnicodeEncodeError:
        secret = bytes_(secret, 'utf-8')
    sig = bytes_(hmac.new(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)


class PickleSerializer(object):
    """ A serializer that uses the pickle protocol to dump Python
    data to bytes.

    This is the default serializer used by Pyramid.

    ``protocol`` may be specified to control the version of pickle used.
    Defaults to :attr:`pickle.HIGHEST_PROTOCOL`.

    """
    def __init__(self, protocol=pickle.HIGHEST_PROTOCOL):
        self.protocol = protocol

    def loads(self, bstruct):
        """Accept bytes and return a Python object."""
        return pickle.loads(bstruct)

    def dumps(self, appstruct):
        """Accept a Python object and return bytes."""
        return pickle.dumps(appstruct, self.protocol)

def BaseCookieSessionFactory(
    serializer,
    cookie_name='session',
    max_age=None,
    path='/',
    domain=None,
    secure=False,
    httponly=False,
    samesite='Lax',
    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``.

    ``samesite``
      The 'samesite' option of the session cookie. Set the value to ``None``
      to turn off the samesite option.  Default: ``'Lax'``.

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

    .. versionchanged: 1.10

       Added the ``samesite`` option and made the default ``'Lax'``.
    """

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

        # configuration parameters
        _cookie_name = cookie_name
        _cookie_max_age = max_age if max_age is None else int(max_age)
        _cookie_path = path
        _cookie_domain = domain
        _cookie_secure = secure
        _cookie_httponly = httponly
        _cookie_samesite = samesite
        _cookie_on_exception = set_on_exception
        _timeout = timeout if timeout is None else int(timeout)
        _reissue_time = reissue_time if reissue_time is None else int(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:
                    # 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
                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
            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 PY2:
            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,
                samesite=self._cookie_samesite,
                )
            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_samesite='Lax',
    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_samesite``
      The 'samesite' option of the session cookie. Set the value to ``None``
      to turn off the samesite option.  Default: ``'Lax'``.

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

    .. versionchanged: 1.10

       Added the ``samesite`` option and made the default ``'Lax'``.
    """

    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,
        samesite=cookie_samesite,
        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,
    samesite='Lax',
    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 512 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``.

    ``samesite``
      The 'samesite' option of the session cookie. Set the value to ``None``
      to turn off the samesite option.  Default: ``'Lax'``.

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

    .. versionchanged: 1.10

       Added the ``samesite`` option and made the default ``Lax``.
    """
    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,
        samesite=samesite,
        timeout=timeout,
        reissue_time=reissue_time,
        set_on_exception=set_on_exception,
    )

check_csrf_origin = check_csrf_origin  # api
deprecated('check_csrf_origin',
           'pyramid.session.check_csrf_origin is deprecated as of Pyramid '
           '1.9. Use pyramid.csrf.check_csrf_origin instead.')

check_csrf_token = check_csrf_token  # api
deprecated('check_csrf_token',
           'pyramid.session.check_csrf_token is deprecated as of Pyramid '
           '1.9. Use pyramid.csrf.check_csrf_token instead.')

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