Permalink
Fetching contributors…
Cannot retrieve contributors at this time
128 lines (103 sloc) 4.34 KB
from pyramid.httpexceptions import (
HTTPBadRequest,
HTTPNotFound,
HTTPForbidden,
)
NotFound = HTTPNotFound # bw compat
Forbidden = HTTPForbidden # bw compat
CR = '\n'
class BadCSRFOrigin(HTTPBadRequest):
"""
This exception indicates the request has failed cross-site request forgery
origin validation.
"""
title = "Bad CSRF Origin"
explanation = (
"Access is denied. This server can not verify that the origin or "
"referrer of your request matches the current site. Either your "
"browser supplied the wrong Origin or Referrer or it did not supply "
"one at all."
)
class BadCSRFToken(HTTPBadRequest):
"""
This exception indicates the request has failed cross-site request
forgery token validation.
"""
title = 'Bad CSRF Token'
explanation = (
'Access is denied. This server can not verify that your cross-site '
'request forgery token belongs to your login session. Either you '
'supplied the wrong cross-site request forgery token or your session '
'no longer exists. This may be due to session timeout or because '
'browser is not supplying the credentials required, as can happen '
'when the browser has cookies turned off.')
class PredicateMismatch(HTTPNotFound):
"""
This exception is raised by multiviews when no view matches
all given predicates.
This exception subclasses the :class:`HTTPNotFound` exception for a
specific reason: if it reaches the main exception handler, it should
be treated as :class:`HTTPNotFound`` by any exception view
registrations. Thus, typically, this exception will not be seen
publicly.
However, this exception will be raised if the predicates of all
views configured to handle another exception context cannot be
successfully matched. For instance, if a view is configured to
handle a context of ``HTTPForbidden`` and the configured with
additional predicates, then :class:`PredicateMismatch` will be
raised if:
* An original view callable has raised :class:`HTTPForbidden` (thus
invoking an exception view); and
* The given request fails to match all predicates for said
exception view associated with :class:`HTTPForbidden`.
The same applies to any type of exception being handled by an
exception view.
"""
class URLDecodeError(UnicodeDecodeError):
"""
This exception is raised when :app:`Pyramid` cannot
successfully decode a URL or a URL path segment. This exception
behaves just like the Python builtin
:exc:`UnicodeDecodeError`. It is a subclass of the builtin
:exc:`UnicodeDecodeError` exception only for identity purposes,
mostly so an exception view can be registered when a URL cannot be
decoded.
"""
class ConfigurationError(Exception):
""" Raised when inappropriate input values are supplied to an API
method of a :term:`Configurator`"""
class ConfigurationConflictError(ConfigurationError):
""" Raised when a configuration conflict is detected during action
processing"""
def __init__(self, conflicts):
self._conflicts = conflicts
def __str__(self):
r = ["Conflicting configuration actions"]
items = sorted(self._conflicts.items())
for discriminator, infos in items:
r.append(" For: %s" % (discriminator, ))
for info in infos:
for line in str(info).rstrip().split(CR):
r.append(" " + line)
return CR.join(r)
class ConfigurationExecutionError(ConfigurationError):
"""An error occurred during execution of a configuration action
"""
def __init__(self, etype, evalue, info):
self.etype, self.evalue, self.info = etype, evalue, info
def __str__(self):
return "%s: %s\n in:\n %s" % (self.etype, self.evalue, self.info)
class CyclicDependencyError(Exception):
""" The exception raised when the Pyramid topological sorter detects a
cyclic dependency."""
def __init__(self, cycles):
self.cycles = cycles
def __str__(self):
L = []
cycles = self.cycles
for cycle in cycles:
dependent = cycle
dependees = cycles[cycle]
L.append('%r sorts before %r' % (dependent, dependees))
msg = 'Implicit ordering cycle:' + '; '.join(L)
return msg